【问题标题】:Deserializing JSON string to Object with json.net使用 json.net 将 JSON 字符串反序列化为 Object
【发布时间】:2011-02-18 21:53:05
【问题描述】:

我正在构建一个小型应用程序,该应用程序从我无法控制的 API 中提取统计信息。 JSON 字符串如下所示:

{
    "weapons":
        [
            {
                "aek":
                    {
                        "name":"AEK-971 Vintovka",
                        "kills":47,
                        "shots_fired":5406,
                        "shots_hit":858
                    },
                "xm8":
                    {
                        "name":"XM8 Prototype",
                        "kills":133,
                        "shots_fired":10170,
                        "shots_hit":1790
                    },
            }
        ]
}

我的对象设置如下:

class WeapsCollection
{
    public WeaponList[] Weapons { get; set; }
}

class WeaponList
{
    public WeaponDetails AEK { get; set; }
    public WeaponDetails XM8 { get; set; }
}

class WeaponDetails
{
    public string Name { get; set; }
    public int Kills { get; set; }
    public int Shots_Fired { get; set; }
    public int Shots_Hit { get; set; }
}

按照现在设置的方式反序列化字符串没有任何问题,即我可以这样做:

WeapsCollection weps = JsonConvert.DeserializeObject<WeapsCollection>(json);
Console.WriteLine(weps.Weapons.First().AEK.Name.ToString());
Console.ReadLine();

这会输出AEK-971 Vintovka

好吧...但我不希望将不同的武器作为单独的属性。我希望能够对每种武器进行枚举并执行 foreach 或类似的操作:

Console.WriteLine(weapons.Where(w => w.Kills > 30).Name.ToString());

任何提示如何实现这一点?

实际武器列表是 60+,但我一直在考虑在反序列化之前对 JSON 数据执行一个字符串。Replace ("[weaponName]", "weapon"),但我也无法让它工作.

如果有任何提示,我将不胜感激。

【问题讨论】:

    标签: c# json.net


    【解决方案1】:

    您可以做的是从 JSON 中删除方括号,从而将其从数组转换为字典。然后这将直接反序列化到这个类中:

    class WeaponList
    {
        public Dictionary<string, WeaponDetails> Weapons { get; set; }
    }
    

    然后你可以用它做任何你想做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多