RestSharp反序列化API返回JSON为Client列表失败求助
问题分析与解决建议
你遇到的问题根源很清晰:你的JSON响应结构和你尝试反序列化的目标类型不匹配。
看一下返回的JSON结构,最外层是一个包含resource属性的对象,这个属性的值才是你需要的Client数组;而你直接让RestSharp反序列化为List<Client>,RestSharp找不到对应的数组结构,自然返回null。当你反序列化为单个Client时,它会尝试匹配第一个对象的字段,刚好能对上第一个元素的属性,所以能拿到数据,但这并不是正确的做法。
解决方案1:创建对应的包装类(推荐)
最规范的做法是创建一个和JSON外层结构匹配的类,然后再提取里面的List<Client>:
1. 定义包装类
public class ClientResponse { public List<Client> resource { get; set; } }
2. 修改反序列化代码
把原来的IRestResponse<List<Client>>改成IRestResponse<ClientResponse>,然后从响应数据中取出resource属性:
IRestResponse<ClientResponse> response = restClient.Execute<ClientResponse>(request); var content = response.Content; var clientList = response.Data?.resource; // 这里拿到的就是Client列表 // 遍历输出测试 if (clientList != null) { foreach(Client c in clientList) { Console.WriteLine(c.ClientName); } }
解决方案2:手动解析JSON(无需新增类)
如果你不想新增包装类,可以用Newtonsoft.Json(RestSharp底层通常也依赖它)直接解析JSON字符串,提取resource数组再反序列化:
IRestResponse response = restClient.Execute(request); var content = response.Content; // 解析JSON并提取resource数组 var jsonObj = Newtonsoft.Json.Linq.JObject.Parse(content); var clientList = jsonObj["resource"].ToObject<List<Client>>(); // 遍历输出测试 foreach(Client c in clientList) { Console.WriteLine(c.ClientName); }
这两种方法都能解决你当前的问题,第一种更符合强类型编程的规范,便于维护;第二种适合快速临时处理。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

