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

