JSON.NET对象反序列化与类

时间:2014-04-29 22:08:05

标签: c#-4.0 deserialization

我正在使用这些课程:

public class MasteryPages
{
    internal MasteryPages() { }

    [JsonProperty("pages")]
    public List<MasteryPage> Pages { get; set; }

    [JsonProperty("summonerId")]
    public long SummonerId { get; set; }
}

[Serializable]
public class MasteryPage
{
    internal MasteryPage() { }

    [JsonProperty("current")]
    public bool Current { get; set; }

    [JsonProperty("id")]
    public long Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("talents")]
    public List<Talent> Talents { get; set; }
}

[Serializable]
public class Talent
{
    internal Talent() { }

    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("rank")]
    public int Rank { get; set; }
}

这是我用来反序列化对象的代码

//MASTERIES
var jsonMasteries = requester.CreateRequest(string.Format(RootUrl, Region) + string.Format(MasteriesUrl, summonerId));                       
var objAllMasteryPages = JsonConvert.DeserializeObject<MasteryPages>(jsonMasteries);

jsonMasteries对象被正确序列化并给我这个: http://pastebin.com/3dkdDHdx(相当大,轻松查看:转到http://www.jsoneditoronline.org/并粘贴)

然而,第二行给了我麻烦。通常我的对象应该填充数据。不幸的是,它不是,我不知道什么是错的。

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

您的问题出在序列化JSON的这一部分:"42177333": { ... }

据我了解 - 这是某种身份证,而且是动态的。 可能的解决方案是:

  • 其中一种可能的解决方案是:C# deserialize dynamic JSON
  • 剪切动态JSON的这一部分。
  • 尝试修改序列化内容以避免此动态ID。

答案 1 :(得分:0)

感谢梦游者我看到了什么问题。 (动态Id(数字),第一行)

现在,James Newtonking JSON库有一个动态id的解决方案。 我编写了我的代码:

var jsonMasteries = requester.CreateRequest(string.Format(RootUrl, Region) + string.Format(MasteriesUrl, summonerId));
var  objAllMasteriePages = JsonConvert.DeserializeObject<Dictionary<long, MasteryPages>>(jsonMasteries).Values.FirstOrDefault().Pages;

(第一行保持不变,魔术在第二行) 现在,我使用一个字典,其中键是我给定的Id,以及我的自定义类。

这可以创造奇迹