我有一个OData V4控制器返回的Entity Framework对象。 我返回一个IQueryable,如果我调用没有任何OData子句的OData端点,我可以成功地执行此操作:
var content = response.Content.ReadAsAsync<IQueryable<Person>>();
JSON中的响应如下:
{
"@odata.context":"http://xxx:8082/odata/$metadata#Persons","value":[
{
"Id":"291b9f1c-2587-4a35-993e-00033a81f6d5",
"Active":true,
"Alert":"Some alerts for the Person",
"Comments":"Some comments for the Person"
}
]
}
但是一旦我开始使用OData,例如在Complex属性上使用$ expand,我就会得到以下异常:
无法将当前JSON对象(例如{&#34; name&#34;:&#34; value&#34;})反序列化为类型System.Linq.IQueryable`1 [xxx.Person]&#39;因为类型需要JSON数组(例如[1,2,3])才能正确反序列化。
响应如下:
{
"@odata.context":"http://aqavnext01:8082/odata/$metadata#Persons","value":[
{
"Id":"291b9f1c-2587-4a35-993e-00033a81f6d5",
"Active":true,
"Alert":"Some alerts for the Person",
"Comments":"Some comments for the Person",
"Party":{
"Id":"291b9f1c-2587-4a35-993e-00033a81f6d5"
}
}
]
}
我正在使用我的Web Api返回的相同对象进行反序列化,所以我不明白为什么它会失败。 应用$ select时会出现同样的问题。
答案 0 :(得分:5)
尝试反序列化内容,如下所示:
var content = response.Content.ReadAsAsync<ODataResponse<Person>>();
ODataResponse是:
internal class ODataResponse<T>
{
public T[] Value { get; set; }
}