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

如何在C#中反序列化含动态日期键的API返回JSON?

解决方案

针对你遇到的动态日期键反序列化问题,有两种实用的处理方式,以下是具体代码示例:

方式1:直接反序列化为带Dictionary的POCO类

这种方式无需手动遍历节点,利用Dictionary<string, T>自动匹配动态键,是最简便的方案:

首先定义对应的数据模型:

using System.Collections.Generic;
using System.Text.Json.Serialization;

public class ApiResponse
{
    [JsonPropertyName("found")]
    public bool Found { get; set; }

    [JsonPropertyName("resultsData")]
    public List<Dictionary<string, List<DailyInfo>>> ResultsData { get; set; }

    [JsonPropertyName("message")]
    public string Message { get; set; }
}

public class DailyInfo
{
    [JsonPropertyName("info1")]
    public string Info1 { get; set; }

    [JsonPropertyName("infoCode")]
    public int InfoCode { get; set; }

    [JsonPropertyName("infos")]
    public List<InfoItem> Infos { get; set; }
}

public class InfoItem
{
    [JsonPropertyName("code")]
    public int Code { get; set; }

    [JsonPropertyName("extraInfo1")]
    public string ExtraInfo1 { get; set; }

    [JsonPropertyName("extraInfo2")]
    public string ExtraInfo2 { get; set; }

    [JsonPropertyName("extraInfo3")]
    public string ExtraInfo3 { get; set; }

    [JsonPropertyName("order")]
    public int Order { get; set; }

    [JsonPropertyName("risk")]
    public string Risk { get; set; }

    [JsonPropertyName("alarm")]
    public string Alarm { get; set; }
}

然后直接反序列化:

using System.Text.Json;

string jsonString = "你的API返回JSON字符串";
var apiResponse = JsonSerializer.Deserialize<ApiResponse>(jsonString);

// 遍历处理数据
foreach (var dateDict in apiResponse.ResultsData)
{
    foreach (var kvp in dateDict)
    {
        string dateStr = kvp.Key;
        List<DailyInfo> dailyData = kvp.Value;
        // 这里可以将dateStr转为DateTime,或者直接使用字符串
        // DateTime date = DateTime.Parse(dateStr);
        // 处理dailyData中的内容
    }
}

方式2:使用JsonNode手动遍历动态键

如果你已经在使用JsonNode处理,可以通过遍历对象属性来提取动态日期键:

using System.Text.Json;
using System.Text.Json.Nodes;

string jsonString = "你的API返回JSON字符串";
JsonNode rootNode = JsonNode.Parse(jsonString);

// 获取resultsData数组
JsonArray resultsArray = rootNode["resultsData"].AsArray();

foreach (JsonNode itemNode in resultsArray)
{
    JsonObject dateObject = itemNode.AsObject();
    // 每个对象只有一个日期键值对,用Single()获取
    var dateEntry = dateObject.Single();
    string dateStr = dateEntry.Key;
    JsonArray dailyInfoArray = dateEntry.Value.AsArray();

    // 将数组反序列化为DailyInfo列表
    List<DailyInfo> dailyInfos = dailyInfoArray.Deserialize<List<DailyInfo>>();

    // 后续处理dateStr和dailyInfos
}

两种方式都能完美处理动态日期键的问题,推荐优先使用方式1,代码更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:14:56