Estoy construyendo una pequeña aplicación que extrae estadísticas de una API sobre la que no tengo control. El cadena JSON se ve así:Deserializando cadena JSON a Object con json.net
{
"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
},
}
]
}
y mis objetos están configurados de la siguiente manera:
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; }
}
que no tienen ningún problema deserializar la cadena de la forma en que está configurado ahora, es decir, puedo hacer:
WeapsCollection weps = JsonConvert.DeserializeObject<WeapsCollection>(json);
Console.WriteLine(weps.Weapons.First().AEK.Name.ToString());
Console.ReadLine();
Esto da salida a AEK-971 Vintovka
Bien ... pero no quiero las diferentes armas como propiedades separadas. Quiero ser capaz de enumerar y hacer un foreach en cada arma o algo así:
Console.WriteLine(weapons.Where(w => w.Kills > 30).Name.ToString());
Algún consejo de cómo lograr esto?
La lista de armas reales es 60+ pero he estado pensando en hacer una cadena. Reemplazar ("[weaponName]", "weapon") en los datos JSON antes de deserializarlos, pero no puedo hacerlo funcionar ya sea.
Agradecería cualquier consejo.
Gracias David. ¡Funciona a las mil maravillas! – Fr3gU