使用Json.net将JSON字符串反序列化为对象

5
我正在开发一个小应用程序,从一个我无法控制的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 数据之前,我考虑在数据中执行 string.Replace("[weaponName]", "weapon"),但无法使其起作用。

我会感激任何提示。

1个回答

3
你可以将JSON中的方括号去掉,这样它就从数组变成了字典。然后就可以直接反序列化为这个类:
class WeaponList
{
    public Dictionary<string, WeaponDetails> Weapons { get; set; }
}

你可以随意处理它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接