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

C#调用CoinMarketCap API获取数据时,读取percent_change_90d字段报Object must implement IConvertible错误的解决方案

解决CoinMarketCap API字段转换「Object must implement IConvertible」错误

看起来你遇到的这个错误,大概率是因为JToken的Value<T>()方法在处理可空类型或非直接可转换的token时出现了兼容性问题。让我来拆解原因并给出具体解决办法:

错误根源

当你调用item["quote"]["USD"]["percent_change_90d"].Value<double?>()时,可能遇到了两种情况:

  1. API返回的percent_change_90d字段是null值,而Value<T>()方法对可空值类型的空值处理不够友好;
  2. 该字段的返回类型并非直接可转换为double的数值类型(比如偶尔返回字符串格式的数字),导致转换时触发IConvertible接口要求的异常。

具体解决方法

方法1:用ToObject<double?>()替代Value<double?>()

这是最简单的修复方式,ToObject<T>()对可空类型的兼容性更好,还能自动处理空值,同时搭配空传播运算符?.避免空引用异常:

// 替换原有赋值代码
itm.PercentChnage90D = item["quote"]?["USD"]?["percent_change_90d"]?.ToObject<double?>();

方法2:手动判断+健壮转换(应对边缘情况)

如果API偶尔会返回异常格式的数据(比如"N/A"字符串而非数字),可以手动做类型检查和转换,避免程序崩溃:

var changeToken = item["quote"]?["USD"]?["percent_change_90d"];
if (changeToken != null && changeToken.Type != JTokenType.Null)
{
    if (double.TryParse(changeToken.ToString(), out double changeValue))
    {
        itm.PercentChnage90D = changeValue;
    }
    else
    {
        // 转换失败时的兜底处理,比如赋值null或记录日志
        itm.PercentChnage90D = null;
    }
}
else
{
    itm.PercentChnage90D = null;
}

额外小提示

你的实体类属性名PercentChnage90D有个小拼写错误(应该是PercentChange90D,少了字母a),虽然不影响当前错误,但统一命名规范能减少后续维护问题哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 08:57:29