CS0029错误:JsonConvert反序列化类型转换失败的解决问询
解决CS0029:无法将NpiResponseModel转换为List的问题
错误根源在于你的方法声明返回List<NpiResponseModel>,但实际反序列化得到的是单个NpiResponseModel实例,类型完全不兼容,导致编译错误。
问题核心
NPI注册中心API的响应结构并非直接返回单个NpiResponseModel对象,而是一个包含结果数组的根对象(格式示例如下):
{ "result_count": 1, "results": [ { /* 你的NpiResponseModel对应字段 */ } ] }
你直接反序列化到NpiResponseModel会导致结构不匹配,同时返回单个对象与方法返回类型冲突。
正确实现步骤
定义根响应模型
创建一个匹配API返回结构的根类:public class NpiRootResponse { [JsonProperty("result_count")] public int ResultCount { get; set; } [JsonProperty("results")] public List<NpiResponseModel> Results { get; set; } }修改反序列化逻辑
调整方法代码,反序列化到根模型后返回结果列表:public List<NpiResponseModel> LookupByNpiNumber(NpiRequestModel npiRequest) { var client = new RestClient("https://npiregistry.cms.hhs.gov/api/"); var request = new RestRequest("?"); request.AddParameter("version", "2.1"); request.AddParameter("number", npiRequest.Number); request.AddParameter("enumeration_type", "NPI-1"); var response = client.Execute(request); var content = response.Content; var rootResponse = JsonConvert.DeserializeObject<NpiRootResponse>(content); // 空值保护,避免返回null引发异常 return rootResponse?.Results ?? new List<NpiResponseModel>(); }
为什么之前的尝试无效
你之前尝试直接转换单个对象或用AddRange,本质是因为反序列化的目标类型错误——API返回的不是List<NpiResponseModel>,也不是单个NpiResponseModel,而是包含列表的根对象,所以必须先匹配正确的结构才能获取到列表数据。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

