繁体   English   中英

使用json.net将JSON字符串反序列化为Object

[英]Deserializing JSON string to Object with json.net

我正在构建一个小应用程序,它从我无法控制的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]”,“武器”),但我也无法使其工作。

我很感激任何提示。

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

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

然后,您可以随心所欲地做任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM