You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:37:39