Одним из способов решения этой проблемы было бы использование атрибута JsonExtensionData
public class Exampleget
{
public int Power;
public int Mana;
public int Strenght;
public int Armor;
public int Health;
}
public class GetNumbers
{
[JsonExtensionData]
public Dictionary<string,dynamic> Values;
}
Теперь, когда класс установлен,
var str = @"{
'1': {
'Armor': 1,
'Strenght': 1
},
'0': {
'Armor': 1,
'Mana': 2,
'Strenght': 1,
'Health': 1,
'Power': 1
}
}";
var result = JsonConvert.DeserializeObject<GetNumbers>(str);
foreach(var item in result.Values)
{
Console.WriteLine($"For Key {item.Key},Power = {item.Value.Power}, Mana = {item.Value.Mana}, Armor = {item.Value.Armor}, Health = {item.Value.Health}");
}
Вывод
For Key 1,Power = , Mana = , Armor = 1, Health =
For Key 0,Power = 1, Mana = 2, Armor = 1, Health = 1
Обновление
Если вы хотите использовать словарь как Dictionary<string,Exampleget>
вместо динамического, вы можете использовать дополнительное свойство, которое выполняет преобразование в Exampleget.Но это требует дополнительной сериализации / десериализации, поэтому не рекомендую, если у вас нет веских причин придерживаться этого.
public class GetNumbers
{
[JsonExtensionData]
public Dictionary<string,object> Values;
[JsonIgnore]
public Dictionary<string,Exampleget> ExamplegetDictionary=> Values.Select(x=>new KeyValuePair<string,Exampleget>(x.Key, ((object)x.Value).Cast<Exampleget>()))
.ToDictionary(x=>x.Key,y=>y.Value);
}
public static class Extension
{
public static T Cast<T>(this object value)
{
var jsonData = JsonConvert.SerializeObject(value);
return JsonConvert.DeserializeObject<T>(jsonData);
}
}