C# 如何统一解析API返回的JObject与JArray两种格式JSON数据
方案1:使用JToken.Parse统一解析(最推荐)
Newtonsoft.Json 提供的JToken.Parse方法可以自动识别JSON结构,不管外层是对象{}还是数组[]都能正常解析,无需手动判断字符串开头,代码写法非常简洁:
using (WebClient webClient = new WebClient()) { webClient.Headers.Add("Authorization", "Basic ***"); webClient.Headers.Add("clientId", clientId); webClient.Headers.Add("Content-Type", "application/json"); string response = webClient.DownloadString(urlAgreementBase + urlAgreementParams); if (string.IsNullOrWhiteSpace(response)) { throw new InvalidPluginExecutionException("Failed to retrieve company. Response was empty."); } // 统一解析,不用区分对象还是数组 JToken result = JToken.Parse(response); // 后续根据类型处理即可 if (result.Type == JTokenType.Array) { JArray arrayResult = (JArray)result; // 处理数组逻辑 } else if (result.Type == JTokenType.Object) { JObject objectResult = (JObject)result; // 处理对象逻辑 } }
方案2:统一转为数组处理(如果业务逻辑适配)
如果你的后续处理逻辑本来就兼容多数据的情况,可以把单个对象也包装成数组统一处理,省掉分支判断:
JToken result = JToken.Parse(response); JArray arrayResult = result.Type == JTokenType.Array ? (JArray)result : new JArray(result); // 后续统一用arrayResult处理即可
额外建议
优先确认API返回结构不一致的原因:如果是你调用了不同的接口(比如查单个条目和查条目列表),可以根据调用的接口类型直接选择对应的解析方式,不需要额外判断;如果是同一个接口随机返回两种结构,建议联系API提供方确认是否是接口设计缺陷,从根源解决问题。
内容的提问来源于stack exchange,提问作者BeamerEA
相关产品推荐
相关产品推荐

