C# 如何从含嵌套转义的API响应JSON数组提取商品详情列表
C# 从多层嵌套转义JSON中提取商品详情的实现方案
核心解析难点
对应给出的API响应报文,直接做反序列化大概率会触发格式错误,主要原因是:
shipping_address、payment_status、delivery_status、product_details这些字段的返回值不是原生JSON结构,是经过转义的字符串,不能直接映射成对象/数组product_details数组内的每个元素,外层包裹了一个无固定规则的哈希随机键,结构为{"随机哈希值":{真实商品对象}},没有固定属性名,无法直接通过强类型类映射- 商品对象内的
option字段,本身又是一层嵌套的转义JSON字符串
具体实现流程
目前C#生态中处理这类多层嵌套JSON最稳妥的工具是Newtonsoft.Json,通过Nuget安装即可,安装命令为:Install-Package Newtonsoft.Json
第一步:定义外层固定结构的模型类
只对结构固定的外层字段做强类型映射,减少手写解析的工作量:
// 最外层API响应模型 public class ApiResponse { public string Status { get; set; } public List<OrderInfo> Result { get; set; } } // 单个订单的基础模型 public class OrderInfo { public string order_id { get; set; } public string order_amount { get; set; } public string delivery_api_status { get; set; } // 注意:product_details的元素是字符串,不要直接定义成商品对象列表 public List<string> product_details { get; set; } // 其他需要用到的订单字段按需补充即可 } // 最终需要的商品详情模型 public class ProductItem { public string id { get; set; } public int qty { get; set; } public decimal price { get; set; } public string name { get; set; } public string image { get; set; } public string rowid { get; set; } public decimal subtotal { get; set; } // 其他需要的商品字段按需补充即可 }
第二步:逐层级解包转义的JSON结构
因为存在多层嵌套转义,需要逐层拆分解析:
// 假设jsonResponse是从API拿到的完整响应字符串 var baseResponse = JsonConvert.DeserializeObject<ApiResponse>(jsonResponse); var finalProductList = new List<ProductItem>(); foreach (var order in baseResponse.Result) { // 遍历每个商品的转义字符串 foreach (var productWrapStr in order.product_details) { // 第一层解包:把转义字符串解析为动态对象,拿到随机哈希键对应的真实商品节点 var wrapNode = JObject.Parse(productWrapStr); // 因为哈希键是随机生成的,直接取第一个属性的子节点即可 var realProductNode = wrapNode.Properties().First().Value; // 转换为强类型商品对象,加入最终列表 var product = realProductNode.ToObject<ProductItem>(); finalProductList.Add(product); } }
灵活解析提示:如果不想提前定义大量模型类,也可以直接用
JObject/JArray动态取值,适配性更强:
- 解析转义的对象字符串(比如
shipping_address字段):用JObject.Parse(字段值)转成动态对象后直接按属性名取值- 解析转义的数组字符串(比如
payment_status、delivery_status字段):用JArray.Parse(字段值)转成动态数组后遍历取值- 商品内嵌套的
option字段:拿到字符串值后用JObject.Parse解包即可
内容的提问来源于stack exchange,提问作者Venkatesh S
相关产品推荐
相关产品推荐

