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

JSON反序列化后OneDay.Price_change值为null 无法读取加密货币1d价格变动

你遇到的空报错核心原因是JSON返回字段和C#模型属性名不匹配:返回的JSON里1小时、1天数据对应的键名是1h、1d,但你的CryptoApiMain类中对应的属性名是OneHour、OneDay,序列化框架默认按名称精准匹配,找不到对应的键就不会给属性赋值,导致OneDay始终为null,访问其Price_change属性就触发空引用报错。

解决步骤

  1. 给模型属性加序列化别名特性
    根据你使用的序列化库选择对应特性:
  • 如果用.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; }

    // 其他原有属性保持不变
}
  1. 额外适配调整
    你定义的Price属性为double类型,但JSON返回的price是字符串格式的数值,部分序列化框架默认不会自动转换,建议要么将Price改为string类型,要么配置序列化规则允许字符串转数值。

  2. 增加空值防护
    建议在前端渲染时增加空值判断,避免接口特殊场景下无1d数据时再次报错,业务代码修改参考:

<p>$@Convert.ToInt64(@rez.Price) @(rez.OneDay?.Price_change ?? "暂无涨跌数据")</p>
  1. 验证反序列化逻辑
    确认settingsService.CryptoApiResult方法中是将返回的JSON数组反序列化为List<CryptoApiMain>类型,不要错误反序列化为单个对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:24:00