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

调用CovidTracking API遇JsonException:无法转换为CovidDataModel

解决JSON转换错误:数组与对象类型不匹配问题

你遇到的JsonException核心原因是:API返回的JSON根结构是数组([]包裹),但你代码里试图将其反序列化为CovidDataModel这个对象类型,两者结构不匹配导致转换失败。

解决方案

直接将返回结果反序列化为Class1类型的数组即可,不需要外层的CovidDataModel包装类。

修改后的代码:

Class1[] coviddata; // 把变量类型改为数组
string errorString;
protected override async Task OnInitializedAsync()
{
    var request = new HttpRequestMessage(HttpMethod.Get, "https://api.covidtracking.com/v1/us/current.json");

    var client = _clientFactory.CreateClient();

    HttpResponseMessage response = await client.SendAsync(request);

    if (response.IsSuccessStatusCode)
    {
        coviddata = await response.Content.ReadFromJsonAsync<Class1[]>(); // 反序列化为数组类型
        errorString = null;
    }
    else
    {
        errorString = $"Could not load Covid Data: {response.ReasonPhrase}";
    }
} 

可选:清理模型定义

既然不需要外层的CovidDataModel,可以直接删除这个类,同时给Class1重命名为更有意义的名字(比如UsCovidData),符合C#命名规范:

namespace CovidTracking.Models
{
    public class UsCovidData
    {
        public int Date { get; set; }
        public int States { get; set; }
        public int Positive { get; set; }
        public int Negative { get; set; }
        public int Hospitalized { get; set; }
        public string Hash { get; set; } // 首字母大写,序列化时会自动匹配API返回的小写字段
    }
}

如果坚持要使用CovidDataModel作为接收类型,需要API返回的JSON根结构是包含Property1字段的对象,但当前API返回的结构不满足这一点,所以不推荐这种做法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 00:01:10