我有一个类似的json响应
{
"appStatus":{
"status":true
},
"lastSyncDate":"06-07-2013 13.54.27",
"configResponse":{
"status":{
"status":true
},
"configs":{
"APPLOGENABLED":{
"configCode":"APPLOGENABLED",
"configDesc":"enable or disable logging from front end",
"configType":"TAB",
"configValue":"Y"
},
"COMMENTSTIMER":{
"configCode":"COMMENTSTIMER",
"configDesc":"timer for comments in seconds",
"configType":"TAB",
"configValue":"60"
},
"SUMMARYTIMER":{
"configCode":"SUMMARYTIMER",
"configDesc":"timer for summary in seconds",
"configType":"TAB",
"configValue":"30"
},
"ALERTSTIMER":{
"configCode":"ALERTSTIMER",
"configDesc":"timer for alerts in seconds",
"configType":"TAB",
"configValue":"60"
}
},
"lastSyncDate":"06/07/2013 13.48.13"
}
}
使用json。NET,我想把configResponse
提取到字典中。我知道我可以直接转换像这样的Dictionary对象
JsonConvert.DeserializeObject<Dictionary<string,string>>()....
但由于configResponse
是一个子元素,我无法根据需要解析它。
我想将上面的json响应反序列化为
public class ConfigResponse
{
public Status status { get; set; }
public Dictionary<string, ConfigurationItem> configs { get; set; }
public string lastSyncDate { get; set; }
}
public class ConfigurationItem
{
public String configCode { get; set; }
public String configDesc { get; set; }
public String configType { get; set; }
public String configValue { get; set; }
}
您可以将JSON字符串解析为JObject
,获取子对象"configResponse",然后将其反序列化为ConfigResponse
。这是一行代码:
JObject.Parse("{...}")["configResponse"].ToObject<ConfigResponse>()
如果需要自定义序列化程序来设置反序列化选项,可以将其传递给ToObject<T>()
方法。
我只使用过这个方法,它很有效。
await JsonConvert.DeserializeObjectAsync<ConfigResponse>(jsontoobject, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });