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

如何在C#中正确解析CoinGecko API返回的JSON数据?

解决CoinGecko API JSON反序列化后USD值为0的问题

问题重现的JSON数据

{"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0": {"usd": 0.889768}}

核心问题分析

你遇到的USD值为0的情况,大概率是模型定义不匹配导致的:

  • 要么未正确映射JSON中的usd字段(比如大小写不匹配且未配置JsonProperty特性);
  • 要么反序列化时使用的类型不正确,没有对应到字典嵌套对象的结构。

正确的模型定义与反序列化代码

1. 定义匹配的实体类

public class TokenPrice
{
    // 用JsonProperty特性绑定JSON中的小写"usd"字段
    [JsonProperty("usd")]
    public decimal UsdPrice { get; set; }
}

2. 反序列化为字典类型

因为JSON顶层是合约地址作为键、价格对象作为值的结构,直接反序列化为Dictionary<string, TokenPrice>即可:

string coinGeckoJson = "{\"0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0\": {\"usd\": 0.889768}}";

// 使用JsonConvert执行反序列化
var priceMap = JsonConvert.DeserializeObject<Dictionary<string, TokenPrice>>(coinGeckoJson);

// 读取目标合约的USD价格
if (priceMap.TryGetValue("0x7d1afa7b718fb893db30a3abc0cfc608aacfebb0", out var priceData))
{
    // 输出结果:0.889768
    Console.WriteLine($"USD价格:{priceData.UsdPrice}");
}

常见错误排查

  • 如果模型类中没有[JsonProperty("usd")]特性,且属性名是大写的Usd,JsonConvert会因大小写不匹配无法绑定值,最终返回decimal的默认值0;
  • 避免用dynamic类型直接读取,类型推导可能导致小数精度丢失或绑定失败;
  • 无需额外配置JsonConvert的小数处理规则,默认配置即可正确解析JSON中的小数为decimal类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 14:32:36