OData API响应反序列化List<Classification>时抛出异常求助
解决OData API响应反序列化异常问题
我懂你现在碰到的麻烦了——你从OData API拿到的JSON响应是多层嵌套结构,但你直接把整个响应反序列化成List<Classification>,结果触发了类型不匹配的异常。咱们来一步步搞定这个问题:
问题根源
你拿到的JSON最外层是一个包含d属性的对象,d里面才是存储目标数据的results数组,而你需要的dateTime、body、subject字段都在results的每个元素里。但你的代码直接把整个JSON当成数组来反序列化,自然会报错——因为JSON最外层是对象,不是数组。
解决方法
方法1:创建匹配JSON结构的包装类
你可以先定义几个和JSON结构对应的包装类,先把整个响应反序列化到这些类中,再提取出你需要的results列表:
// 定义匹配JSON嵌套结构的包装类 public class ODataResponseRoot { public D d { get; set; } } public class D { public List<Classification> results { get; set; } } // 你的原有Classification类保持不变 public class Classification { public DateTime dateTime { get; set; } public string body { get; set; } public string subject { get; set; } }
然后修改反序列化代码:
IRestResponse response = client.Execute(request); var oDataResponse = JsonConvert.DeserializeObject<ODataResponseRoot>(response.Content); List<Classification> classifications = oDataResponse.d.results;
方法2:直接用JObject解析(无需额外定义包装类)
如果不想创建额外的包装类,可以用Newtonsoft.Json的JObject直接定位到results数组再反序列化:
IRestResponse response = client.Execute(request); JObject jsonObject = JObject.Parse(response.Content); JArray resultsArray = (JArray)jsonObject["d"]["results"]; List<Classification> classifications = resultsArray.ToObject<List<Classification>>();
这两种方法都能正确提取到仅包含dateTime、body、subject字段的对象列表,完美解决反序列化的异常问题。
内容的提问来源于stack exchange,提问作者snowflakes74
相关产品推荐
相关产品推荐

