【问题标题】:Cannot deserialize the current JSON object error无法反序列化当前 JSON 对象错误
【发布时间】:2017-01-13 06:19:43
【问题描述】:

我正在尝试将下面的 JSON 反序列化为一个列表:

 {
        character_list: [
        {
             displayname: "Bob (Server 3)",
             name: {
                  first_lower: "bob",
                  first: "Bob"
             },
             id: 123
        },
        {
             displayname: "Bobby (Server 12)",
             name: {
                  first_lower: "bobby",
                  first: "Bobby"
             },
             id: 1234
        },
        {
             displayname: "Bobert (Server 9)",
             name: {
                  first_lower: "bobert",
                  first: "Bobert"
             },
             id: 12345
        },
        {
             displayname: "Bobostic (Server 1)",
             name: {
                  first_lower: "bobostic",
                  first: "Bobostic "
             },
             id: 123456
        }
        ]
    }

JSON 存储在一个名为 info 的变量中。我有以下行:

var charList = JsonConvert.DeserializeObject<List<Character>>(info);

但是当我尝试时,我收到以下错误:

无法反序列化当前 JSON 对象(例如 {"name":"value"}) 进入类型“System.Collections.Generic.List” 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。要修复此错误,请将 JSON 更改为 JSON 数组 (例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,也不是集合 可以从 JSON 反序列化的数组或列表等类型 目的。 JsonObjectAttribute 也可以添加到类型中来强制它 从 JSON 对象反序列化。路径“character_list”,第 1 行, 第 18 位。

我的角色类:

    public Character(string json)
    {
        var jObject = JObject.Parse(json);
        var jNow = jObject["character_list"];

        Name = (string)jNow.First["name"]["first"];
        CharacterId = (int) jNow.First["id"];
        DisplayName = (string) jNow.First["displayname"];
    }

我已经尝试搜索该网站,我看到的大多数答案都建议使用我已经使用的方法。(即,Question 1Question 2

【问题讨论】:

  • 它不是一个有效的 JSON。您可以从该站点检查它是否无效以及哪个部分不正确。 jsonlint.com

标签: c# json serialization


【解决方案1】:

info 变量不是带有一个名为character_list 的属性的 JSON 对象吗?您不应该尝试反序列化作为实际字符列表的 info.character_list,而不是 info。

这个解释也符合错误信息。

【讨论】:

    【解决方案2】:

    你可以安装Newtonsoft JSON,然后你的类就变成这样了

    public class Name
    {
        [JsonProperty("first_lower")]
        public string first_lower { get; set; }
        [JsonProperty("first")]
        public string first { get; set; }
    }
    
    public class CharacterList
    {
        [JsonProperty("displayname")]
        public string displayname { get; set; }
        [JsonProperty("name")]
        public Name name { get; set; }
        [JsonProperty("id")]
        public int id { get; set; }
    }
    
    public class Character
    {
        [JsonProperty("character_list")]
        public List<CharacterList> character_list { get; set; }
    }
    

    然后像这样反序列化它

    string info = File.ReadAllText(YourJSONFile);
    var ser = JsonConvert.DeserializeObject<Character>(info);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多