C#如何从JSON结果中仅提取CardTransactions数组和值为0的status字段
C# 提取JSON指定字段实现方案
两种主流实现方式可选,均会自动忽略不需要的JSON字段,仅提取你需要的CardTransactions数组和response节点下值为0的status字段:
方案1:使用Newtonsoft.Json(Json.NET,兼容所有.NET版本)
步骤1:安装依赖
NuGet包管理器搜索安装 Newtonsoft.Json 即可。
步骤2:定义仅包含所需字段的实体类
// 对应CardTransactions数组内的交易元素 public class CardTransaction { public string TransactionDate { get; set; } public string InvoiceNo { get; set; } public decimal Amount { get; set; } } // 对应JSON根节点 public class ResponseRoot { public InnerResponse Response { get; set; } } // 对应response内层节点,仅定义需要的两个字段 public class InnerResponse { public List<CardTransaction> CardTransactions { get; set; } public int Status { get; set; } }
步骤3:反序列化提取数据
// jsonStr为你拿到的原始JSON字符串 var result = JsonConvert.DeserializeObject<ResponseRoot>(jsonStr); // 提取目标数据 List<CardTransaction> transactions = result.Response.CardTransactions; int status = result.Response.Status; // 可自行判断status是否等于0再执行业务逻辑 if (status == 0) { // 业务逻辑 }
轻量无实体类实现
如果不想定义实体类,可以直接用JObject解析:
var jObj = JObject.Parse(jsonStr); int status = jObj["response"]["status"].Value<int>(); List<CardTransaction> transactions = jObj["response"]["CardTransactions"].ToObject<List<CardTransaction>>();
方案2:使用.NET 自带System.Text.Json(.NET Core 3.0+ / .NET 5+ 适用,无需额外安装依赖)
实体类定义和方案1完全一致,反序列化代码如下:
var result = System.Text.Json.JsonSerializer.Deserialize<ResponseRoot>(jsonStr); List<CardTransaction> transactions = result.Response.CardTransactions; int status = result.Response.Status;
无实体类实现
var jsonNode = System.Text.Json.Nodes.JsonNode.Parse(jsonStr); int status = jsonNode["response"]["status"].GetValue<int>(); List<CardTransaction> transactions = System.Text.Json.JsonSerializer.Deserialize<List<CardTransaction>>(jsonNode["response"]["CardTransactions"]);
注意事项
- 未在实体类中定义的JSON字段会自动被反序列化工具忽略,无需额外编写过滤规则
- 若使用System.Text.Json时出现属性名大小写不匹配导致的取值为null问题,可添加忽略大小写配置:
var options = new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true }; var result = System.Text.Json.JsonSerializer.Deserialize<ResponseRoot>(jsonStr, options);
内容的提问来源于stack exchange,提问作者Wei Chen Chen
相关产品推荐
相关产品推荐

