【问题标题】:JSON.NET Deserializing from fileJSON.NET 从文件反序列化
【发布时间】:2021-03-04 15:50:10
【问题描述】:

我是 JSON.Net 和 JSON 的新手——我正在尝试从文件中反序列化一个数组。我不断收到错误“无法将 JSON 对象反序列化为数组”,因为它显然格式不正确。但是,我将 JSON 复制到一个字符串中并在 C# 类中使用它,一切正常。当我回到从文件中获取它时,与以前相同的错误。不知道是什么问题!

类内 JSON 字符串:

string json = @"[{
                'id': 1,
                'name': '...',
                'image': '...',
                'attack': 12,
                'defense': 3,
                'magic': 4,
                'speed': 2,
                'hp': 20
            },
            {   
                'id': 2,
                'name': '...',
                'image': '...',
                'attack': 3,
                'defense': 14,
                'magic': 9,
                'speed': 7,
                'hp': 14


            },
            {
                'id': 3,
                'name': '...',
                'image': '...',
                'attack': 3,
                'defense': 14,
                'magic': 9,
                'speed': 7,
                'hp': 14
            }

            ]";

monsters = JsonConvert.DeserializeObject<List<Monster>>(json);

还有文件:

[
    {
        'id': 1,
        'name': '...',
        'image': '...',
        'attack': 12,
        'defense': 3,
        'magic': 4,
        'speed': 2,
        'hp': 20
    },
    {
        'id': 2,
        'name': '...',
        'image': '...',
        'attack': 15,
        'defense': 5,
        'magic': 3,
        'speed': 4,
        'hp': 17
    }
]


monsters = JsonConvert.DeserializeObject<List<Monster>>(File.ReadAllText(@"Content\Data\monsterData.json"));

monsters 被定义为上面的列表。

我做错了什么?感谢您的帮助!

【问题讨论】:

  • 该文件包含的对象比类内字符串少,只是因为我正在测试其他内容
  • 帮我一个忙,将 json 保留在字符串中,但也以相同的方式从文件中读取。使用 string.Equals 比较字符串。它们/实际上/一样吗?
  • 尝试将 JSON 文件中的单引号替换为双引号,尝试任何在线 JSON 验证器,我使用这个 JSONFormatter
  • 格式化程序说双引号没问题,但我仍然遇到同样的错误
  • 好吧,所以即使我已经从字符串复制到文件,它说字符串是不同的所以必须弄清楚...

标签: c# json .net json.net monogame


【解决方案1】:

你能分享一下“怪物”课程吗,因为我在做同样的事情,而且一切都很好。 下面提到的是我的代码

public class Monster
{
    public int id { get; set; }
    public string name { get; set; }
    public string image { get; set; }
    public int attack { get; set; }
    public int defense { get; set; }
    public int magic { get; set; }
    public int speed { get; set; }
    public int hp { get; set; }
}

以下代码从 Json 文件中读取并反序列化

   var data = File.ReadAllText(@"xyz\json1.json");
        Console.WriteLine(data);
        var myDeserializedClass = JsonConvert.DeserializeObject<List<Monster>>(data);

以下是JsonFile:

[
    {
      "id": 1,
      "name": "...",
      "image": "...",
      "attack": 12,
      "defense": 3,
      "magic": 4,
      "speed": 2,
      "hp": 20
    },
    {
      "id": 2,
      "name": "...",
      "image": "...",
      "attack": 15,
      "defense": 5,
      "magic": 3,
      "speed": 4,
      "hp": 17
    }
]

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2017-08-11
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多