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

C# ASP.NET反序列化第三方汇率JSON后有模型无数据问题咨询

问题原因

你的实体类定义没有错误,问题出在反序列化的目标类型和JSON结构不匹配:
你获取的JSON外层是Root对象的数组,CurrencyDTO列表是存放在每个Root对象的currencies字段中的,你直接将返回结果反序列化为List<CurrencyDTO>,结构无法匹配,自然拿不到数据。
另外你的代码存在冗余逻辑:你先用HttpClient发送了请求,又用已过时的WebClient重复请求了一次相同接口,属于不必要的性能浪费,直接复用HttpClient的返回结果即可。

修正后的代码示例

推荐优先使用异步写法,避免.Result导致的线程死锁问题:

public async Task<IActionResult> Index()
{
    List<CurrencyDTO> ct = new List<CurrencyDTO>();
    HttpResponseMessage response = await client.GetAsync(BaseURL);
    if (response.IsSuccessStatusCode)
    {
        string rawJSON = await response.Content.ReadAsStringAsync();
        // 先反序列化为对应结构的Root列表
        var rootList = JsonConvert.DeserializeObject<List<Root>>(rawJSON);
        // 取出第一组数据的货币列表(该接口默认只返回一个日期的汇率数据)
        ct = rootList?.FirstOrDefault()?.currencies ?? new List<CurrencyDTO>();
    }
    return View(ct);
}

如果必须使用同步写法,调整为以下即可:

public IActionResult Index()
{
    List<CurrencyDTO> ct = new List<CurrencyDTO>();
    HttpResponseMessage response = client.GetAsync(BaseURL).Result;
    if (response.IsSuccessStatusCode)
    {
        string rawJSON = response.Content.ReadAsStringAsync().Result;
        var rootList = JsonConvert.DeserializeObject<List<Root>>(rawJSON);
        ct = rootList?.FirstOrDefault()?.currencies ?? new List<CurrencyDTO>();
    }
    return View(ct);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:57:01