You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何从JSON响应嵌套对象提取指定key值创建列表

C# 提取目标JSON字段的实现方法

你已经通过var responseMessage1 = await request1.Content.ReadAsStringAsync();拿到接口返回的JSON字符串,以下是两种常用的提取方案,最终都会生成支持foreach遍历的List<string>类型结果。


方案1:使用.NET内置System.Text.Json(无第三方依赖,推荐)

不需要定义完整的JSON映射实体类,直接轻量解析提取目标字段即可:

  • 引用System.Text.Json命名空间
  • 解析JSON根节点后定位到operations数组
  • 遍历数组提取每个元素的description值,加入结果列表
using System.Text.Json;

// 原有接口请求代码
var responseMessage1 = await request1.Content.ReadAsStringAsync();

var desc_list = new List<string>();
// 若接口返回字段大小写不固定,可开启大小写不敏感配置
var jsonOptions = new JsonDocumentOptions { PropertyNameCaseInsensitive = true };
using (JsonDocument doc = JsonDocument.Parse(responseMessage1, jsonOptions))
{
    JsonElement operationsNode = doc.RootElement.GetProperty("operations");
    foreach (JsonElement opItem in operationsNode.EnumerateArray())
    {
        // 加空判断避免字段缺失抛出异常
        if (opItem.TryGetProperty("description", out JsonElement descNode))
        {
            desc_list.Add(descNode.GetString()!);
        }
    }
}

// 直接遍历使用
foreach(var item in desc_list)
{
    Console.WriteLine(item);
}

运行后遍历输出结果为:

Generate Plan
Stop Station

方案2:使用第三方库Newtonsoft.Json(Json.NET)

如果你的项目已经引入了Newtonsoft.Json序列化库,可以用以下方式实现:

  • 引用Newtonsoft.Json.Linq命名空间
  • 解析为JObject后通过LINQ直接提取字段生成列表
using Newtonsoft.Json.Linq;

// 原有接口请求代码
var responseMessage1 = await request1.Content.ReadAsStringAsync();

JObject jsonObj = JObject.Parse(responseMessage1);
var desc_list = jsonObj["operations"]
    .Select(op => op["description"]?.ToString())
    .Where(desc => !string.IsNullOrEmpty(desc))
    .ToList();

// 直接遍历使用
foreach(var item in desc_list)
{
    Console.WriteLine(item);
}

说明:两种方案生成的desc_list都是标准的泛型字符串列表,完全支持遍历、LINQ操作等所有列表常用功能。如果后续需要用到JSON里的其他字段,也可以定义对应结构的实体类做完整反序列化,仅提取单个字段的场景下,上述直接解析的方式代码量更少、执行效率更高。

内容的提问来源于stack exchange,提问作者saurabh dhyani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 03:18:28