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
相关产品推荐
相关产品推荐

