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

JSON转C#类反序列化失败,需用嵌套字典及NewtonSoft实现

解决方案:Newtonsoft.Json 嵌套字典反序列化实现

1. 定义匹配的根对象类

直接把rates字段声明为嵌套字典类型,同时处理JSON里可能和C#关键字冲突的字段(比如base):

public class ExchangeRateResult
{
    // 按需添加JSON里的其他字段,比如base、start_date等
    public string @base { get; set; }
    public string start_date { get; set; }
    public string end_date { get; set; }
    // 核心:日期为键,每个日期对应货币-汇率的字典
    public Dictionary<string, Dictionary<string, double>> rates { get; set; }
}

如果你的C#字段名和JSON键名大小写不一致(比如C#用Rates而JSON是rates),给字段加JsonProperty特性指定映射:

[JsonProperty("rates")]
public Dictionary<string, Dictionary<string, double>> Rates { get; set; }

2. 执行反序列化

一行代码直接解析:

var jsonContent = "你的JSON字符串内容";
var rateData = JsonConvert.DeserializeObject<ExchangeRateResult>(jsonContent);

3. 排查反序列化失败的常见坑

如果还是跑不通,检查这几个点:

  • JSON格式合法性:先确认JSON没有语法错误(比如多余逗号、未闭合引号),用本地的JSON编辑器(比如VS自带的)校验。
  • 汇率值类型不匹配:如果JSON里的汇率是字符串(比如"1.23")而非数字,要么把字典值类型改成string,要么写个自定义转换器转成double。
  • 空值或缺失字段:如果某些日期下的货币字段是null,把double改成double?(可空类型)避免报错。
  • 嵌套层级错误:确认JSON里的rates确实是「日期→货币→汇率」的两层结构,没有多嵌套或少嵌套。

测试示例

假设你的JSON结构如下,用上面的代码可以直接解析成功:

{
  "base": "USD",
  "start_date": "2024-05-01",
  "end_date": "2024-05-03",
  "rates": {
    "2024-05-01": {
      "AUD": 1.5287,
      "EUR": 0.9165,
      "GBP": 0.7821
    },
    "2024-05-02": {
      "AUD": 1.5292,
      "EUR": 0.9159,
      "USD": 1.0
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:54:24