解析复杂的JSON字符串以读取C#中的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析复杂的JSON字符串以读取C#中的值相关的知识,希望对你有一定的参考价值。
我想在C#中读取下面的JSON字符串
{
"ModelState": {
"obj.SystematicDate": {
"_errors": [
{
"<Exception>k__BackingField": null,
"<ErrorMessage>k__BackingField": "A value is required."
}
],
"<Value>k__BackingField": null
},
"obj.CustomerId": {
"_errors": [
{
"<Exception>k__BackingField": null,
"<ErrorMessage>k__BackingField": "A value is required."
}
],
"<Value>k__BackingField": null
},
"obj.userId": {
"_errors": [
{
"<Exception>k__BackingField": null,
"<ErrorMessage>k__BackingField": "User Id is mandatory"
}
],
"<Value>k__BackingField": null
}
}
}
上面提到的JSON字符串是来自api调用的响应,它是动态的。它可以包含n
数量的'obj.'
属性。
我需要读取该值并显示错误消息为SystematicDate: A value is required
,userId: User Id is mandatory
等。
我试过下面的解决方案,但没有得到所需的输出。
var jsonStrin = "{'ModelState':{'obj.SystematicDate':{'_errors':[{' < Exception > k__BackingField':null,' < ErrorMessage > k__BackingField':'A value is required.'}],' < Value > k__BackingField':null},'obj.CustomerId':{'_errors':[{' < Exception > k__BackingField':null,' < ErrorMessage > k__BackingField':'A value is required.'}],' < Value > k__BackingField':null},'obj.userId':{'_errors':[{' < Exception > k__BackingField':null,' < ErrorMessage > k__BackingField':'User Id is mandatory'}],' < Value > k__BackingField':null}}}";
//var stuff=JsonConvert.DeserializeObject(jsonStrin);
//JObject o = JObject.Parse(jsonStrin);
var example1Model = new javascriptSerializer().Deserialize<ModelState>(jsonStrin);
public class ModelState {
public List<SystematicDateError> SystematicDate { get; set; }
public List<CustomerIdError> CustomerId { get; set; }
}
public class SystematicDateError
{
public List<string> _errors { get; set; }
}
public class CustomerIdError
{
public List<string> _errors { get; set; }
}
请帮我解决一下这个。提前致谢。
答案
你的模型类是错误的。我像这样修改它们;
public class Root
{
public ModelState ModelState { get; set; }
}
public class ModelState
{
[JsonProperty("obj.SystematicDate")]//You should specify the obj. properties here
public Obj SystematicDate { get; set; }
[JsonProperty("obj.CustomerId")]
public Obj CustomerId { get; set; }
[JsonProperty("obj.userId")]
public Obj UserId { get; set; }
}
public class ObjError
{
public string k__BackingField { get; set; }
public string k__BackingField2 { get; set; }
}
public class Obj
{
public List<ObjError> _errors { get; set; }
public string state { get; set; }
}
然后就像这样反序列化它;
var jsonStrin = "{'ModelState':{'obj.SystematicDate':{'_errors':[{' < Exception > k__BackingField':null,' < ErrorMessage > k__BackingField':'A value is required.'}],' < Value > k__BackingField':null},'obj.CustomerId':{'_errors':[{' < Exception > k__BackingField':null,' < ErrorMessage > k__BackingField':'A value is required.'}],' < Value > k__BackingField':null},'obj.userId':{'_errors':[{' < Exception > k__BackingField':null,' < ErrorMessage > k__BackingField':'User Id is mandatory'}],' < Value > k__BackingField':null}}}";
var stuff=JsonConvert.DeserializeObject<Root>(jsonStrin);
以上是关于解析复杂的JSON字符串以读取C#中的值的主要内容,如果未能解决你的问题,请参考以下文章