运行天气应用遇序列化错误:无法将浮点值解析为Int32类型
解决OpenWeatherMap JSON反序列化的Int32解析错误
嘿,这个问题我太熟了!咱们先把错误信息拆明白:无法将值'-3.23'解析为Int32类型——核心原因就是你的C#模型类WeatherApp.RootObject1里,某个字段被定义成了整数类型(int),但OpenWeatherMap返回的JSON里对应字段是带小数的浮点数(比如-3.23),反序列化器自然转不动啦。
下面是具体的解决步骤:
1. 定位问题字段
先手动查看API返回的JSON结构(直接在浏览器打开你提供的URL就行),找到值为-3.23的字段。大概率是温度、体感温度这类数值字段,比如main对象下的temp、feels_like,或者其他带小数的气象指标。
2. 修正模型类的字段类型
找到RootObject1类里对应那个字段的定义,把int改成double或者float。举个例子:
- 错误的字段定义:
public class Main { // 这里用了int,但API返回的是浮点数 public int temp { get; set; } public int feels_like { get; set; } }
- 修正后的字段定义:
public class Main { public double temp { get; set; } public double feels_like { get; set; } }
3. 全面检查数值字段
别只改一个就完事!建议把模型里所有和数值相关的字段都过一遍,比如气压(pressure)、湿度(humidity)、风速(speed)这些,确保它们的类型和API返回的JSON值完全匹配——有些字段是整数,有些是浮点数,要对应准确。
额外小技巧
如果你是用JSON转C#工具自动生成的模型,记得在生成时留意数值类型的选项,避免工具默认把所有数值都设成int;或者生成后手动核对一遍每个字段的类型。
内容的提问来源于stack exchange,提问作者Kevin Moran
相关产品推荐
相关产品推荐

