我有一个Web API服务器,我使用ODATA(和EF 6)返回一个项目列表(由使用DevExpress ODataInstantFeedbackSource绑定的WinForms客户端使用他们的GridControl)。无法序列化从ODATA v3升级到v4后的响应正文
这里是返回的项目列表中的Web API控制器方法:
public IHttpActionResult GetItems(ODataQueryOptions<Item> queryOptions)
{
var customerNumber = Request.Headers.GetValues("CustomerNumber").FirstOrDefault();
try
{
queryOptions.Validate(_validationSettings);
var query = queryOptions.ApplyTo(Context.Items) as IQueryable<Item>;
var items = query.AsEnumerable().Select(i => new Item()
{
ItemNumber = i.ItemNumber,
ItemDescription = i.ItemDescription,
<snip>
RebateAmount = RebateUtil.CalculateInstantRebates(i.ItemNo, customerNumber),
}).AsQueryable();
return Ok(items);
}
catch (ODataException ex)
{
return BadRequest(ex.Message);
}
}
之前我升级到的OData V3,上述被正常使用;在升级之后,我现在得到:
的ObjectContent1型未能序列化反应体 内容类型“文本/纯;字符集= UTF-8”, 类型值为“System.Linq.EnumerableQuery1 [ [AcmeService.Model.Item, AcmeService.Model,Version = 1.0.0.0,Culture = neutral, PublicKeyToken = null]]“无法转换为原始字符串。
我在HTTP响应正文(状态500)中看到上述消息。请求的URL是:http://acme.us/odata/Items/ $ count
请注意,如果我让GetItems控制器只是做一个“返回OK(Context.Items)”,它工作正常(没有错误,但我需要能够设置RebateAmount在返回数据之前的值)。
我在做什么错?