【发布时间】: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"),但我也无法让它工作.
如果有任何提示,我将不胜感激。
【问题讨论】: