如何使用JSON.NET反序列化JSON(获取null结果)

时间:2014-07-04 23:27:10

标签: c# json serialization json.net

我是C#/ JSON的新手,我正在开展一个宠物项目来展示传奇联盟的召唤者/游戏信息。

我正在尝试获取所请求的召唤者名称的召唤者ID。

这是返回的JSON:

{"twopeas": {
   "id": 42111241,
   "name": "Twopeas",
   "profileIconId": 549,
   "revisionDate": 1404482602000,
   "summonerLevel": 30
}}

这是我的召唤师课程:

public class Summoner
        {

            [JsonProperty(PropertyName = "id")]
            public string ID { get; set; }

        }

以下是其余部分:

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    StreamReader reader = new StreamReader(response.GetResponseStream());

    result = reader.ReadToEnd();

    var summonerInfo = JsonConvert.DeserializeObject<Summoner>(result);

    MessageBox.Show(summonerInfo.ID);

summonerInfo.ID为空,我不知道为什么。

我确信有一些明显的东西让我失踪了,但我不知道我不能为我的生活弄清楚。

1 个答案:

答案 0 :(得分:2)

您的ID为空,因为您的JSON与您要反序列化的类不匹配。在JSON中,id属性不在顶层:它包含在一个对象中,该对象是名为twopeas的顶级属性的值(可能代表召唤者名称)。由于此属性名称可能因查询而异,因此您应该反序列化为Dictionary<string, Summoner>,如下所示:

var summoners = 
           JsonConvert.DeserializeObject<Dictionary<string, Summoner>>(result);

MessageBox.Show(summoners.Values.First().ID);