JSON反序列化后OneDay.Price_change值为null 无法读取加密货币1d价格变动
你遇到的空报错核心原因是JSON返回字段和C#模型属性名不匹配:返回的JSON里1小时、1天数据对应的键名是1h、1d,但你的CryptoApiMain类中对应的属性名是OneHour、OneDay,序列化框架默认按名称精准匹配,找不到对应的键就不会给属性赋值,导致OneDay始终为null,访问其Price_change属性就触发空引用报错。
解决步骤
- 给模型属性加序列化别名特性
根据你使用的序列化库选择对应特性:
- 如果用.NET默认的
System.Text.Json,修改CryptoApiMain类如下:
public class CryptoApiMain { [JsonPropertyName("1h")] public OneHour OneHour { get; set; } [JsonPropertyName("1d")] public OneDay OneDay { get; set; } // 其他原有属性保持不变 }
- 如果用Newtonsoft.Json(Json.NET),修改为:
public class CryptoApiMain { [JsonProperty("1h")] public OneHour OneHour { get; set; } [JsonProperty("1d")] public OneDay OneDay { get; set; } // 其他原有属性保持不变 }
额外适配调整
你定义的Price属性为double类型,但JSON返回的price是字符串格式的数值,部分序列化框架默认不会自动转换,建议要么将Price改为string类型,要么配置序列化规则允许字符串转数值。增加空值防护
建议在前端渲染时增加空值判断,避免接口特殊场景下无1d数据时再次报错,业务代码修改参考:
<p>$@Convert.ToInt64(@rez.Price) @(rez.OneDay?.Price_change ?? "暂无涨跌数据")</p>
- 验证反序列化逻辑
确认settingsService.CryptoApiResult方法中是将返回的JSON数组反序列化为List<CryptoApiMain>类型,不要错误反序列化为单个对象。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

