使用JsonConvert.DeserializeObject反序列化json对象内部的数组

问题描述

我有以下格式的传入json对象的要求:

{
   "CustomerList": {
       "Customer": [{
            "CustomerCode" : "C123","CustomerName" : "Peter"
       },{
            "CustomerCode" : "C456","CustomerName" : "John"
       }]
   }
}

我有以下格式的C#对象:

[System.Xml.Serialization.XmlArrayItemAttribute(IsNullable = "false")]
public Customer[] CustomerList
{
   get; set;
}

[System.Xml.Serialization.XmlTypeAttribute()]
public class Customer
{
    public string CustomerCode {get; set;}
    public string CustomerName {get; set;}
}

在使用JsonConvert.DeserializeObject()反序列化期间,出现以下错误: 无法将当前JSON对象反序列化为Customer []类型,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化。

在我这方面的限制是,我不能更改传入的JSON对象,也不能修改C#对象的结构。因此,问题在于,是否有一种方法可以将传入的Json中的Customer节点直接映射到CustomerList C#数组,而无需重命名或更改二者的结构?

解决方法

要反序列化JSON对象,您需要创建一个类似的C#类。

public class JsonObjectTest {
    [JsonPropertyName("CustomerList")]
    public Customer CustomerPreList {get;set;}
}

public class Customer {
    public List<CustomerObject> Customer {get;set;}
}

public class CustomerObject {

    public string CustomerCode { get; set; }
    public string CustomerName { get; set; }
}

然后您反序列化JSON对象:

CustomerList xmlData = JsonConvert.DeserializeObject<JsonObjectTest>(jsonObjectString).Select(data => 
    new CustomerList = data.CustomerPreList.toArray());

很遗憾,我不能问您是否具有创建新类的权限(我需要更多积分)。如果是这种情况,请尝试使用AutoMapper为此特定情况创建映射策略。

快乐编码:)

,

基于您共享的JSON,您需要具有以下类结构。

public class Customer    {
    public string CustomerCode { get; set; } 
    public string CustomerName { get; set; } 
}

public class CustomerList    {
    public List<Customer> Customer { get; set; } 
}

public class RootObject  {
    public CustomerList CustomerList { get; set; } 
}

,然后需要按如下所示反序列化JSON。

RootObject obj = JsonConvert.DeserializeObject<RootObject>(jsonString);

这里jsonString是具有JSON字符串的字符串变量。

希望您能帮助您解决问题。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...