使用RestSharp调用API返回JSON时报InvalidCastException错误如何解决
问题根源
接口返回的JSON最外层是单个对象,你当前的代码将其反序列化为List<ApiResponseON>数组类型,同时定义的Model结构和JSON结构不匹配,导致类型转换报错。
需要修改的内容
1. 重新定义匹配JSON结构的Model
你不需要定义所有返回字段,只需要保留你需要用到的字段即可,示例如下:
// 最外层响应对象,对应JSON的根结构 public class ApiRootResponse { // 对应JSON里的Data数组字段 public List<OrderItem> Data { get; set; } // 其他需要的根字段可以自行添加,比如ReturnCode、TotalRecords等 } // 对应Data数组里的每个订单对象 public class OrderItem { // 属性名和JSON里的字段名保持大小写一致,或者添加序列化别名 public string? Comments { get; set; } // 其他需要的订单字段可以自行添加,比如OrderNumber、OrderStatus等 }
如果你的序列化器对大小写敏感,可给属性加[JsonPropertyName("Comments")](System.Text.Json)或[JsonProperty("Comments")](Newtonsoft.Json)别名注解。
2. 修改API请求方法的反序列化逻辑
将原来反序列化为数组的逻辑,改为反序列化为最外层的ApiRootResponse对象,再返回内部的Data数组即可:
// 返回值改为OrderItem集合 public async Task<List<OrderItem>> GetJson(string on) { RestRequest restRequest = new RestRequest($"/search?filter.on={on}&filter.status=All"); var rootResponse = await _restClient.GetAsync<ApiRootResponse>(restRequest); // 判空后返回数据,避免空引用异常 return rootResponse?.Data ?? new List<OrderItem>(); }
内容的提问来源于stack exchange,提问作者Jason Smithers
相关产品推荐
相关产品推荐

