无法反序列化当前的JSON对象错误

时间:2017-01-13 06:19:44

标签: c# json serialization

我试图将下面的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对象(例如{&#34; name&#34;:&#34; value&#34;})   into type&#39; System.Collections.Generic.List`   因为该类型需要一个JSON数组(例如[1,2,3])来反序列化   正确。要修复此错误,请将JSON更改为JSON数组   (例如[1,2,3])或更改反序列化类型以使其正常   .NET类型(例如,不是整数的基本类型,不是集合   类似于数组或List的类型,可以从JSON反序列化   宾语。 JsonObjectAttribute也可以添加到类型中以强制它   从JSON对象反序列化。路径&#39; character_list&#39;,第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

2 个答案:

答案 0 :(得分:0)

您可以安装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);

答案 1 :(得分:0)

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

此解释也符合错误消息。