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

如何解析REST API返回的JSON响应并遍历其中的对象数组

解析C#中REST API返回的JSON数组的方案

1. 先定义和JSON结构匹配的实体类

根据你给出的响应结构,先定义三个类对应JSON的层级:

// 根对象,对应JSON最外层结构
public class RootResponse
{
    public List<ResultItem> result { get; set; }
}

// result数组的单个元素对象
public class ResultItem
{
    // 因为部分返回项没有这两个字段,所以定义为可空int避免解析报错
    public int? maxTry { get; set; }
    public int? minTry { get; set; }
    public List<DetailItem> details { get; set; }
    public List<string> aggr { get; set; }
    public string zone { get; set; }
}

// details数组的单个元素对象
public class DetailItem
{
    public string firstName { get; set; }
}

注意:你给出的示例JSON存在语法问题(比如"maxTry: 17缺右引号、数组末尾多余逗号),实际API返回的合法JSON才可以正常解析。

2. 选择JSON解析库

你可以任选以下两种常用方案:

  • 官方库System.Text.Json:.NET Core 3.0、.NET 5及以上版本自带,无需额外安装
  • 第三方库Newtonsoft.Json (Json.NET):兼容性更好,需要提前安装NuGet包 Newtonsoft.Json

3. 解析并遍历数组

System.Text.Json版本解析代码

在你拿到finalResponse的位置添加以下代码:

// 配置解析规则:忽略属性名大小写
var jsonOptions = new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true };
RootResponse parsedData = System.Text.Json.JsonSerializer.Deserialize<RootResponse>(finalResponse, jsonOptions);

// 遍历result数组
foreach (var resultItem in parsedData.result)
{
    // 读取基础字段
    Console.WriteLine($"当前区域:{resultItem.zone}");
    if (resultItem.maxTry.HasValue)
    {
        Console.WriteLine($"最大尝试次数:{resultItem.maxTry.Value},最小尝试次数:{resultItem.minTry.Value}");
    }

    // 遍历details子数组(如果存在)
    if (resultItem.details != null)
    {
        foreach (var detail in resultItem.details)
        {
            Console.WriteLine($"人员姓名:{detail.firstName}");
        }
    }

    // 遍历aggr子数组
    foreach (var aggrVal in resultItem.aggr)
    {
        Console.WriteLine($"聚合值:{aggrVal}");
    }
}

Newtonsoft.Json版本解析代码

如果用Newtonsoft.Json,解析部分代码替换为:

RootResponse parsedData = Newtonsoft.Json.JsonConvert.DeserializeObject<RootResponse>(finalResponse);
// 遍历逻辑和上面完全一致

补充优化建议

你现有代码中使用.Result同步等待异步任务,在UI或者ASP.NET场景下有死锁风险,建议改成异步await写法:

// 优化后的异步请求示例
using (HttpClient httpClient = new HttpClient())
{
    // 异步等待请求完成,不要用.Result
    var res = await httpClient.GetAsync(url.ToString());
    // 可选:先判断请求是否成功,避免解析错误响应
    res.EnsureSuccessStatusCode();
    finalResponse = await res.Content.ReadAsStringAsync();
    // 后续解析逻辑不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:08