RestSharp反序列化GET接口响应报错 无法获取Job字段的URL值
问题根因
你遇到的反序列化错误是由2处类型不匹配导致的:
- 你的
Items类中将Job属性定义为List<Job>类型,但返回的JSON中Job是单个对象,不是数组 - 你的
Items类中将DeliveredToNeighbour属性定义为string类型,但返回的JSON中该字段是布尔值(false),类型不匹配
修复方案
首先修改Items类的属性定义:
public class Items { public string Id { get; set; } public string DateCreated { get; set; } public string Gps { get; set; } public string ProcessOutcome { get; set; } public string ProcessOutcomeInternal { get; set; } public string ProcessType { get; set; } public string ProcessTypeInternal { get; set; } public string CallingCard { get; set; } public string AdhocLocation { get; set; } public string ProcessOutcomeReason { get; set; } public string ProcessOutcomeReasonInternal { get; set; } public string ProcessOutcomeReasonText { get; set; } public string IntendedTime { get; set; } public string SafePlace { get; set; } // 改1:将string改为bool,匹配JSON的布尔类型 public bool DeliveredToNeighbour { get; set; } public string NeighbourAddress { get; set; } public string IdentificationDetails { get; set; } // 改2:将List<Job>改为Job,匹配JSON的单个对象结构 public Job Job { get; set; } // 以下JSON返回的其他字段如果不需要使用,可以不用定义,反序列化会自动忽略未声明的属性 }
RestSharp调用及提取Url示例
如果使用RestSharp v107+版本,可直接用泛型方法自动反序列化:
var client = new RestClient("你的接口基础地址"); var request = new RestRequest("你的接口路径", Method.Get); // 按需添加请求头、参数等 var response = await client.ExecuteAsync<BlujayGetJobResponse>(request); if (response.IsSuccessful) { var result = response.Data; // 遍历提取所有Job的Url foreach (var item in result.Items) { string jobUrl = item.Job.Url; // 这里处理你的业务逻辑,存入变量即可 } }
内容的提问来源于stack exchange,提问作者ChinS
相关产品推荐
相关产品推荐

