如何解决使用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字符串的字符串变量。
希望您能帮助您解决问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。