解析复杂的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 requireduserId: 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#中的值的主要内容,如果未能解决你的问题,请参考以下文章

java获取json格式中的值

java怎么取json数据的值

json格式如何读取有特殊字符的数据!内详!

从c中的复杂字符串中读取整数

cookie可以存一个json吗或者存一个数组

SpringBoot Fastjson解析多层嵌套复杂Json字符串