含嵌套数组的JSON反序列化失败问题求助
解决JSON嵌套数组反序列化失败问题
错误核心原因:JSON中的accounts是一个直接的对象数组([...]),但你的C#实体ShipmentData里的Accounts字段对应的是Accounts类(要求JSON对象格式{...}),两者结构不匹配导致反序列化失败。
方案一:修改C#实体适配JSON结构(推荐)
直接调整ShipmentData类中Accounts的类型,让它直接对应JSON里的数组结构,同时删除多余的Accounts中间类:
修改后的实体代码:
public class ShipmentData { public string PlannedShippingDateAndTime { get; set; } public Pickup Pickup { get; set; } public string ProductCode { get; set; } = "N"; // 用数组直接匹配JSON的accounts数组 public ArrayAccounts[] Accounts { get; set; } // 或者使用List<T>,比数组更灵活 // public List<ArrayAccounts> Accounts { get; set; } } public class Pickup { public bool isRequested { get; set; } } public class ArrayAccounts { public string TypeCode { get; set; } public string Number { get; set; } }
方案二:修改JSON格式适配现有实体(不推荐,除非实体结构不能改)
如果必须保留当前的C#实体结构,需要调整JSON的accounts字段为包含数组的对象,与Accounts类的结构对应:
修改后的JSON:
{ "plannedShippingDateAndTime": "2023-02-07T07:06:00 GMT+01:00", "pickup": { "isRequested": false }, "productCode": "N", "accounts": { "arrayAccounts": [ { "typeCode": "shipper", "number": "999999999" } ] } }
补充说明
- 序列化框架(如Newtonsoft.Json或System.Text.Json)默认会自动处理C#帕斯卡命名(
TypeCode)与JSON驼峰命名(typeCode)的映射,无需额外配置。 - 优先选择方案一,因为通常JSON结构由外部系统或前端定义,后端实体应适配该结构而非反向修改JSON。
内容的提问来源于stack exchange,提问作者Federico
相关产品推荐
相关产品推荐

