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

C# 动态键货币API返回JSON反序列化的正确模型定义方法

问题解决方案

错误原因

你当前定义的实体模型和API返回的JSON结构不匹配:返回的JSON顶级节点没有固定名为doviz的字段,而是以动态的币种代码(如USD、EUR)作为顶级键,每个键对应包含三个汇率属性的对象。

正确建模方案

1. 保留Doviz基础实体类

根据反序列化需求可选两种属性定义方式:

  • 方式1:属性定义为string,后续手动转换类型,避免反序列化报错(推荐,适配接口返回的字符串数值+逗号小数分隔符格式)
public class Doviz
{
    public string satis { get; set; }
    public string alis { get; set; }
    public string degisim { get; set; }
}
  • 方式2:如果要直接用decimal类型,需要额外配置自定义JSON转换器处理字符串转decimal、逗号小数分隔符的逻辑。

2. 直接用字典作为反序列化目标类型

不需要单独定义DigerApiDoviz类,JSON的动态键可以直接映射为C#字典的Key,对应汇率对象作为Value:

var client = new RestSharp.RestClient("https://api.genelpara.com/embed/doviz.json");
var request = new RestRequest(Method.GET);
IRestResponse response = client.Execute(request);
// 核心修改:反序列化为Dictionary<string, Doviz>类型
var veri = JsonSerializer.Deserialize<Dictionary<string, Doviz>>(response.Content);

使用示例

// 获取USD的汇率信息
if(veri.TryGetValue("USD", out var usdKur))
{
    Console.WriteLine($"USD卖出价:{usdKur.satis}");
    Console.WriteLine($"USD买入价:{usdKur.alis}");
    Console.WriteLine($"USD涨跌幅:{usdKur.degisim}");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:05