如果您的键/值对不是固定的,并且数据必须是可配置的,那么newtonsoft.json有一个特性可以在这里使用,即
[JsonExtensionData]
.
Read more
扩展数据现在在对象序列化时写入。读取和写入扩展数据可以自动往返所有JSON,而无需将每个属性添加到重新反序列化到的.NET类型中。只声明您感兴趣的属性,让扩展数据完成其余的工作。
在您的情况下,键/值与
0,1,2,3.......N
拥有动态数据,这样您的类将
因此,创建一个属性来收集具有该属性的所有动态键/值对。
[jsonextensiondata]
. 下面我用名字创造了一个
DynamicData
.
class MainObj
{
[JsonExtensionData]
public Dictionary<string, JToken> DynamicData { get; set; }
public int result_code { get; set; }
public string result_message { get; set; }
public string result_output { get; set; }
}
然后您可以像
string json = "Your json here"
MainObj mainObj = JsonConvert.DeserializeObject<MainObj>(json);
编辑:
如果要将动态键的值收集到类中,则可以在类结构下面使用。
class MainObj
{
[JsonExtensionData]
public Dictionary<string, JToken> DynamicData { get; set; }
[JsonIgnore]
public Dictionary<string, ChildObj> ParsedData
{
get
{
return DynamicData.ToDictionary(x => x.Key, y => y.Value.ToObject<ChildObj>());
}
}
public int result_code { get; set; }
public string result_message { get; set; }
public string result_output { get; set; }
}
public class ChildObj
{
public string id { get; set; }
public string name { get; set; }
public string cdate { get; set; }
public string _private { get; set; }
public string userid { get; set; }
public int subscriber_count { get; set; }
}
然后您可以像
MainObj mainObj = JsonConvert.DeserializeObject<MainObj>(json);
然后您可以访问每一个反序列化的数据,比如
int result_code = mainObj.result_code;
string result_message = mainObj.result_message;
string result_output = mainObj.result_output;
foreach (var item in mainObj.ParsedData)
{
string key = item.Key;
ChildObj childObj = item.Value;
string id = childObj.id;
string name = childObj.name;
string cdate = childObj.cdate;
string _private = childObj._private;
string userid = childObj.userid;
int subscriber_count = childObj.subscriber_count;
}