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

如何将复杂JSON数据映射到Model类?嵌套结构与数组字段处理

解决方案:映射Open-Meteo API的复杂嵌套字段

核心思路

要处理hourly_units和hourly这类嵌套结构,必须创建对应的嵌套Model类,不能仅靠List实现。因为这两个字段都是具有固定键的结构化数据,用强类型类封装更符合C#的类型安全要求,也便于后续扩展和维护。

具体实现步骤

  • 创建HourlyUnitsModel类(对应hourly_units字段)
    这个类对应API返回中hourly_units的子字段,包含时间单位和气温单位:

    public class HourlyUnitsModel
    {
        public string time { get; set; }
        public string temperature_2m { get; set; }
        // 后续若有其他参数(如humidity_2m),直接新增属性即可
    }
    
  • 创建HourlyModel类(对应hourly字段)
    这个类封装逐小时数据的数组,包含时间数组和气温数组:

    public class HourlyModel
    {
        public List<string> time { get; set; }
        public List<double> temperature_2m { get; set; }
        // 后续扩展参数时,同理新增对应类型的List属性
    }
    
  • 更新原WeatherModel类,添加嵌套属性
    在原有基础字段的基础上,加入上述两个嵌套类的属性,同时修正原代码中不符合API返回的字段类型:

    public class WeatherModel
    {
        public double latitude { get; set; }
        public double longitude { get; set; }
        public double generationtime_ms { get; set; }
        public int utc_offset_seconds { get; set; }
    
        public string timezone { get; set; }
        public string timezone_abbreviation { get; set; }
        public double elevation { get; set; }
    
        // 新增嵌套字段
        public HourlyUnitsModel hourly_units { get; set; }
        public HourlyModel hourly { get; set; }
    }
    

注意:原代码中latitude、longitude等字段使用long类型错误,API返回的是浮点数值,已修正为double;elevation也调整为double类型以匹配实际返回数据。

为什么不用List?

  • hourly_units是固定键值对(time、temperature_2m),并非动态列表,用类可以明确约束字段名和类型,避免误用。
  • hourly中的两个数组是对应关联的(每个time索引对应同索引的temperature_2m),用类封装能清晰表达这种关联关系,而单纯用List无法体现数据的语义。
  • 后续API新增参数时,只需在嵌套类中添加属性即可,扩展性远优于List。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:20:27