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

C#遍历非统一结构动态JSON遇阻,求指导提取日期字段

问题根源

你当前的遍历层级错误:代码里遍历的是results.items,但这个数组里的每个元素内部还有一个名为item的子数组,真正存储date1和date2的是这个子数组,所以直接访问item.date1自然找不到对应字段。

修正方案

方案1:调整Dynamic遍历逻辑

直接补充嵌套遍历,先遍历外层items,再遍历内层item数组:

using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "myToken");
    httpClient.BaseAddress = new Uri("https://app.website.com/data/");

    HttpResponseMessage response = httpClient.GetAsync("getData.json?item=myItem").Result;
    response.EnsureSuccessStatusCode();

    dynamic result = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync().Result);
    
    foreach (var outerItem in result.results.items)
    {
        // 遍历内层存储日期的item数组
        foreach (var dateEntry in outerItem.item)
        {
            Console.WriteLine($"date1: {dateEntry.date1}, date2: {dateEntry.date2}");
        }
    }
}

方案2:使用强类型模型(推荐生产环境)

用C#类映射JSON结构,避免dynamic的类型风险,编译期就能发现错误:

定义模型类

public class RootResponse
{
    public ResultsContainer results { get; set; }
}

public class ResultsContainer
{
    public List<OuterItem> items { get; set; }
}

public class OuterItem
{
    public List<DateEntry> item { get; set; }
}

public class DateEntry
{
    public string date1 { get; set; }
    public string date2 { get; set; }
}

解析并提取数据

using (var httpClient = new HttpClient())
{
    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "myToken");
    httpClient.BaseAddress = new Uri("https://app.website.com/data/");

    HttpResponseMessage response = httpClient.GetAsync("getData.json?item=myItem").Result;
    response.EnsureSuccessStatusCode();

    string json = response.Content.ReadAsStringAsync().Result;
    RootResponse root = JsonConvert.DeserializeObject<RootResponse>(json);
    
    foreach (var outerItem in root.results.items)
    {
        foreach (var dateEntry in outerItem.item)
        {
            Console.WriteLine($"date1: {dateEntry.date1}, date2: {dateEntry.date2}");
        }
    }
}
额外注意

你提供的JSON示例存在格式错误(比如对象末尾多余的逗号),如果实际请求返回的JSON也有这类问题,需要先修复,否则JsonConvert会解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:06:06