C#使用Newtonsoft.Json反序列化含动态唯一键的嵌套JSON
根因分析
反序列化失败是类型定义和JSON结构不匹配导致的:
- 接口返回的
products是键值对对象结构,商品ID(如PRODUCT_1、PRODUCT_2)是动态生成的对象属性名,不属于固定索引的数组结构 - 最初定义的
Products[]数组类型仅能匹配[]包裹的JSON数组结构,无法适配键名动态变化的对象结构。
修复方案
使用Newtonsoft.Json处理这类动态键结构时,将products属性的类型修改为Dictionary<string, Product>即可正常反序列化,完整代码参考如下:
实体类定义
public class ThirdPartyApiResponse { public bool success { get; set; } public long lastUpdated { get; set; } // 字典的Key对应动态生成的商品ID,Value对应商品详情实体 public Dictionary<string, Product> products { get; set; } } public class Product { public string product_id { get; set; } public object[] sell_summary { get; set; } public object[] buy_summary { get; set; } public object quick_status { get; set; } }
反序列化调用
// 直接调用常规反序列化方法即可,无需额外配置 var result = JsonConvert.DeserializeObject<ThirdPartyApiResponse>(rawJson); // 后续遍历所有商品时,直接遍历字典即可 foreach (var item in result.products) { string currentProductId = item.Key; Product currentProductInfo = item.Value; // 自行实现业务逻辑 }
方案优势
该写法完全兼容后续不断新增的动态商品键,不需要接口新增商品就修改实体类定义,是Newtonsoft.Json处理动态键JSON结构的标准实现方式。
内容的提问来源于stack exchange,提问作者vrexon
相关产品推荐
相关产品推荐

