我正在构建一个小应用程序,它从我无法控制的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
},
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的对象设置如下:
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; }
}
Run Code Online (Sandbox Code Playgroud)
我现在设置的方式反序列化字符串没有任何问题,即我可以这样做:
WeapsCollection weps = JsonConvert.DeserializeObject<WeapsCollection>(json);
Console.WriteLine(weps.Weapons.First().AEK.Name.ToString());
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
这输出 AEK-971 Vintovka
很好......但我不希望将不同的武器作为单独的属性.我希望能够枚举并对每种武器或类似的东西做一个foreach:
Console.WriteLine(weapons.Where(w => w.Kills > 30).Name.ToString());
Run Code Online (Sandbox Code Playgroud)
任何提示如何实现这一目标?
实际的武器清单是60岁以上,但我一直在思考关于反序列化之前的JSON数据做一个与string.replace("[weaponName]","武器"),但我不能得到它的工作的.
我很感激任何提示.
您可以做的就是从 JSON 中删除方括号,这会将其从数组转换为字典。然后,这将直接反序列化到此类中:
class WeaponList
{
public Dictionary<string, WeaponDetails> Weapons { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后你就可以用它做任何你想做的事。
| 归档时间: |
|
| 查看次数: |
7767 次 |
| 最近记录: |