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

C#中反序列化格式特殊的汇率API JSON至对象的问题

解决带特殊格式JSON键的C#反序列化问题

嘿,这个坑我太熟了!那些带序号、空格甚至特殊符号的JSON键确实会让自动生成的类直接报错——毕竟C#的属性名可不能以数字开头或者带空格。不过咱们完全不用妥协,用C#的序列化特性就能完美映射,轻松解决问题。

我分两种主流的JSON序列化库给你讲解决方案,你根据自己项目用的库来选就行:

方案1:用.NET自带的System.Text.Json(.NET Core/.NET 5+默认)

首先,你需要定义一个符合C#语法的类,然后通过[JsonPropertyName]特性把合法的属性名和JSON里的特殊键对应起来。比如假设你的JSON返回是这样的:

{
"1. From_CurrencyCode": "USD",
"2. To_CurrencyCode": "EUR",
"3. Exchange_Rate": "0.92"
}

那对应的C#类可以这么写:

using System.Text.Json.Serialization;

public class ExchangeRateResponse
{
    // 用特性指定对应的JSON键名
    [JsonPropertyName("1. From_CurrencyCode")]
    public string FromCurrencyCode { get; set; }

    [JsonPropertyName("2. To_CurrencyCode")]
    public string ToCurrencyCode { get; set; }

    [JsonPropertyName("3. Exchange_Rate")]
    public decimal ExchangeRate { get; set; }
}

之后反序列化的时候就正常用JsonSerializer就行:

// 假设apiResponse是你从接口拿到的JSON字符串
var rateData = JsonSerializer.Deserialize<ExchangeRateResponse>(apiResponse);
// 现在你可以直接用rateData.FromCurrencyCode这种规范的属性名访问数据啦

方案2:用Newtonsoft.Json(Json.NET,老牌常用库)

如果你的项目用的是Newtonsoft.Json(比如老.NET Framework项目或者依赖了它的其他功能),那就用[JsonProperty]特性来做映射,逻辑和上面类似:

using Newtonsoft.Json;

public class ExchangeRateResponse
{
    [JsonProperty("1. From_CurrencyCode")]
    public string FromCurrencyCode { get; set; }

    [JsonProperty("2. To_CurrencyCode")]
    public string ToCurrencyCode { get; set; }

    [JsonProperty("3. Exchange_Rate")]
    public decimal ExchangeRate { get; set; }
}

反序列化代码:

var rateData = JsonConvert.DeserializeObject<ExchangeRateResponse>(apiResponse);

小提醒

  • 完全不用管json2csharp生成的那些不符合语法的属性名,直接改成符合C#帕斯卡命名法的名字,再用特性映射就好。
  • 如果不确定自己用的是哪个序列化库,看项目依赖:.NET Core 3.0+默认引用了System.Text.Json,而Newtonsoft.Json需要手动安装NuGet包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:12:49