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

C#反序列化太阳辐射API分散属性JSON的模型构建问题

太阳辐射API JSON反序列化实体模型构建方案

实体类设计逻辑

  • 同名但分属不同层级、结构不同的节点必须定义独立类,quicktype的拆分方案是合理的,Json2csharp的自动合并逻辑不符合该JSON的结构特征
  • 根节点下的inputs/outputs/location为业务数据类,meta节点下的同名为元数据类,二者独立定义互不干扰

完整实体类示例(C#)

using Newtonsoft.Json; // 若使用System.Text.Json替换为using System.Text.Json.Serialization;

// 根响应对象
public class SolarRadiationRoot
{
    /// <summary>
    /// 根节点下的业务入参数据
    /// </summary>
    [JsonProperty("inputs")] // System.Text.Json用[JsonPropertyName("inputs")]
    public BusinessInput Inputs { get; set; }

    /// <summary>
    /// 根节点下的业务返回数据
    /// </summary>
    [JsonProperty("outputs")]
    public BusinessOutput Outputs { get; set; }

    /// <summary>
    /// 根节点下的位置业务数据
    /// </summary>
    [JsonProperty("location")]
    public BusinessLocation Location { get; set; }

    /// <summary>
    /// 元数据节点
    /// </summary>
    [JsonProperty("meta")]
    public MetaNode Meta { get; set; }
}

/// <summary>
/// 元数据节点定义
/// </summary>
public class MetaNode
{
    [JsonProperty("inputs")]
    public MetaInput InputsMeta { get; set; }

    [JsonProperty("outputs")]
    public MetaOutput OutputsMeta { get; set; }

    [JsonProperty("location")]
    public MetaLocation LocationMeta { get; set; }

    // 其他meta下的属性按实际结构补充
}

// 按实际JSON字段补充以下类的属性:
// 业务数据类:BusinessInput、BusinessOutput、BusinessLocation
// 元数据类:MetaInput、MetaOutput、MetaLocation

反序列化操作说明

  • 该API返回的是单个JSON对象,无需使用List<Root>反序列化,直接使用根类即可
  • 代码示例(Newtonsoft.Json):
// jsonString为API返回的完整JSON字符串
var response = JsonConvert.DeserializeObject<SolarRadiationRoot>(jsonString);
  • 代码示例(System.Text.Json):
var response = JsonSerializer.Deserialize<SolarRadiationRoot>(jsonString);

历史失败原因排查

  • Json2csharp自动合并同名不同结构节点,生成的类属性无法同时匹配两种结构,导致反序列化时字段映射失败
  • 尝试反序列化为List<Root>属于结构判断错误,该JSON根节点为对象而非数组,会直接抛出类型不匹配异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:39:00