C#调用汇率API反序列化JSON对象时出现报错该如何解决?
问题根因
- 方法返回值
List未指定泛型参数,属于基础语法错误 - openexchangerates 接口返回的是单个JSON对象,不是对象数组,不能直接反序列化为
List<ExchangeRate>类型 ExchangeRate类的属性类型定义不匹配实际JSON结构:Timestamp字段是Unix时间戳格式的数值,不是字符串Rates字段是货币代码为键、汇率数值为值的键值对结构,不是字符串
修复方案
第一步:修正ExchangeRate类定义
public class ExchangeRate { public string Disclaimer { get; set; } public string License { get; set; } // 时间戳用long类型存储,后续可按需转换为DateTime格式 public long Timestamp { get; set; } public string Base { get; set; } // Rates用字典类型匹配键值对结构 public Dictionary<string, decimal> Rates { get; set; } }
第二步:修正API调用方法
// 返回值改为单个ExchangeRate对象,无需嵌套List public static async Task<ExchangeRate> GetLatest(string url) { var client = new HttpClient(); string results = await client.GetStringAsync(url); // 直接反序列化为单个ExchangeRate实例 ExchangeRate rates = JsonConvert.DeserializeObject<ExchangeRate>(results); return rates; }
如果业务逻辑确实需要用List存储结果,反序列化完成后手动添加到List即可:
List<ExchangeRate> ratesList = new List<ExchangeRate> { rates };
内容的提问来源于stack exchange,提问作者Bakari Lewis
相关产品推荐
相关产品推荐

