如何将复杂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
相关产品推荐
相关产品推荐

