C# Newtonsoft json反序列化-密钥作为属性
我有一个json文件:C# Newtonsoft json反序列化-密钥作为属性,c#,json,json.net,json-deserialization,C#,Json,Json.net,Json Deserialization,我有一个json文件: ... "Key1": { "Base": 123, "Max": 1234 }, "Key2": { "Base": 123, "Max": 1234 }, "Key3": { "Base": 123, "Max": 1234 }, ... 我需要用JsonConvert.DeserializeObject(\uu json)
...
"Key1": {
"Base": 123,
"Max": 1234
},
"Key2": {
"Base": 123,
"Max": 1234
},
"Key3": {
"Base": 123,
"Max": 1234
},
...
我需要用JsonConvert.DeserializeObject(\uu json)将其反序列化为一个对象代码>
但是我需要使用键(Key1、Key2、Key3等)作为反序列化对象的属性。
不幸的是,我不能使用另一种反序列化方法,也不能修改json格式
我的目标是这样的
public class Item {
public string Id { get; set; }
public int Base { get; set; }
public int Max { get; set; }
}
我的Id应该是“Key1”,“Key2
有可能吗?制作一个自定义的键
类:
public class Key {
public int Base { get; set; }
public int Max { get; set; }
}
然后将JSON结果中的每个项存储在字典中,其中它的键是键名,它的值是键
项:
var keyCollection = new Dictionary<string, Key>();
//you can then do stuff such as:
var maxOfKeyOne = keyCollection["Key1"].Max;
var baseOfKeyTwo = keyCollection["Key2"].Base;
var keyCollection=newdictionary();
//然后,您可以执行以下操作:
var maxOfKeyOne=keyCollection[“Key1”].Max;
var baseofkeytow2=keyCollection[“Key2”].Base;
为什么不列出一个自定义的键
类,该类具有基
和最大
属性?然后可以使用循环枚举每个键
的属性是的,据我所知,实现这一点的唯一方法是使用自定义反射方法。这一点也不太糟糕,但我认为没有任何内置的方法hat就可以了。真正的对象更复杂,在子对象和键(枚举)上有一些属性用于计算一些数据。我使用一个大框架,从自动生成的文件反序列化,我不能更改反序列化过程或json。但我可以添加JsonConverter、ContractResolver、CustomConverter、属性或任何其他类似的内容,但我只能更新我的类。最后,我使用了一个字典并构建了我的子对象使用OnDeserialized方法进行cts,谢谢。