C#使用JObject解析JSON时如何获取orders下的订单号属性键名
解决方法
你遍历orders对象拿到的每个元素本质是JProperty类型(Newtonsoft.Json的内置类型),直接取它的Name属性即可得到作为键的订单号。
代码示例
方案1:强类型写法(更稳妥,避免dynamic的运行时报错风险)
string content = "{... json ...}"; JObject data = JObject.Parse(content); JObject orders = data["orders"] as JObject; foreach (JProperty orderProp in orders.Properties()) { // 获取订单号 string orderNumber = orderProp.Name; // 获取offerId string offerId = orderProp.Value["offerId"].ToString(); // 你的后续业务逻辑 }
方案2:兼容你现有dynamic写法
不需要大幅改动原有代码,直接加一行取Name即可:
string content = "{... json ...}"; dynamic data = JObject.Parse(content); dynamic orders = data.orders; foreach (var order in orders) { // 新增这行拿订单号 string orderNumber = order.Name; string offerId= order.Last.offerId; }
原理解释
你JSON里的orders是对象结构而非数组,被JObject.Parse解析后对应Newtonsoft.Json.Linq.JObject类型,遍历该对象时的每个元素是描述属性的JProperty实例:
JProperty.Name对应对象的属性名,也就是你要的订单号JProperty.Value对应属性的内容,也就是包含offerId的订单对象
内容的提问来源于stack exchange,提问作者Kresten
相关产品推荐
相关产品推荐

