2017-03-17 107 views
0

我有一個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在返回數據之前的值)。

我在做什麼錯?

回答

0

我在另一個上下文(沒有devexpress)有相同的錯誤信息,但也許這可以幫助你。 我解決它通過更換這個命名空間:由

using System.Web.Http.OData; 

using System.Web.OData; 
相關問題