如何判断JSON响应中嵌套的operations对象列表是否为空
C# 判断接口返回JSON中operations数组是否为空的实现方案
你的判断逻辑失效有两个核心原因:
ReadAsStringAsync()返回的是纯字符串格式的JSON内容,不是支持键索引的结构化JSON对象,直接对字符串使用["operations"]索引无法正确获取目标节点- 空数组
[]是合法的数组类型值,不等于null,仅判断节点是否非空会把空数组误判为存在有效数据
以下是两种常用场景下的可行实现:
方案1:使用.NET内置System.Text.Json(.NET Core/.NET 5+ 无需额外安装依赖)
// 引入所需命名空间 using System.Text.Json; using System.Text.Json.Nodes; // 你原有的接口响应获取代码 var responseMessage1 = await request1.Content.ReadAsStringAsync(); // 解析并判断逻辑 var jsonRoot = JsonNode.Parse(responseMessage1); var operationsArray = jsonRoot?["operations"] as JsonArray; if (operationsArray != null && operationsArray.Count > 0) { // operations数组存在且包含元素时,执行对应业务逻辑 } else { // operations不存在/为空数组时的处理逻辑 }
方案2:使用Newtonsoft.Json(Json.NET,适配.NET Framework等老项目)
// 引入所需命名空间 using Newtonsoft.Json.Linq; // 你原有的接口响应获取代码 var responseMessage1 = await request1.Content.ReadAsStringAsync(); // 解析并判断逻辑 var jsonRoot = JObject.Parse(responseMessage1); var operationsArray = jsonRoot["operations"] as JArray; if (operationsArray != null && operationsArray.Count > 0) { // operations数组存在且包含元素时,执行对应业务逻辑 } else { // operations不存在/为空数组时的处理逻辑 }
注意:如果项目中需要频繁处理接口返回的JSON结构,也可以直接定义对应结构的C#实体类,把JSON整体反序列化为实体对象后,直接判断实体类中Operations列表的
Any()即可,代码可读性会更高。
内容的提问来源于stack exchange,提问作者saurabh dhyani
相关产品推荐
相关产品推荐

