OData扩展为null [英] OData expanding null

查看:88
本文介绍了OData扩展为null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用OData时,如果正在扩展的属性之一为null,则会出现此错误.反正有解决办法吗?我期望的输出是Expanded属性为null,不会引发任何异常.

When using OData and if one of the properties that are being expanded is null i get this error. Is there anyway to solve this? The output I expect is for the expanded property to be null not throw any exception.

<m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<m:code/>
<m:message xml:lang="en-US">An error has occurred.</m:message>
<m:innererror>
    <m:message>
         The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.
    </m:message>
    <m:type>System.InvalidOperationException</m:type>
    <m:stacktrace/>
    <m:internalexception>
        <m:message>
             The EDM instance of type '[Spawtz.OData.Models.Division Nullable=True]' is missing the property 'Id'.
        </m:message>
        <m:type>System.InvalidOperationException</m:type>
        <m:stacktrace>
        at System.Web.Http.OData.EntityInstanceContext.GetPropertyValue(String        propertyName)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructuralPro perty(IEdmStructuralProperty structuralProperty, EntityInstanceContext entityInstanceContext)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructuralPropertyBag(IEnumerable`1 structuralProperties, EntityInstanceContext entityInstanceContext)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateEntry(SelectExpandNode selectExpandNode, EntityInstanceContext entityInstanceContext)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, ODataWriter writer, ODataSerializerContext writeContext)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperty(KeyValuePair`2 navigationPropertyToExpand, EntityInstanceContext  entityInstanceContext, ODataWriter writer)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperties(IDictionary`2 navigationPropertiesToExpand, EntityInstanceContext entityInstanceContext, ODataWriter writer)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, ODataWriter writer, ODataSerializerContext writeContext)
        at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable, IEdmTypeReference feedType, ODataWriter writer, ODataSerializerContext writeContext)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperty(KeyValuePair`2 navigationPropertyToExpand, EntityInstanceContext entityInstanceContext, ODataWriter writer)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperties(IDictionary`2 navigationPropertiesToExpand, EntityInstanceContext entityInstanceContext, ODataWriter writer)
        at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, ODataWriter writer, ODataSerializerContext writeContext)
        at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable, IEdmTypeReference feedType, ODataWriter writer, ODataSerializerContext writeContext)
        at System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content, HttpContentHeaders contentHeaders)
        at System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)
       --- End of stack trace from previous location where exception was thrown ---
        at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
        at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
        at System.Web.Http.WebHost.HttpControllerHandler.&lt;WriteBufferedResponseContentAsync&gt;d__1b.MoveNext()
        </m:stacktrace>
    </m:internalexception>
</m:innererror>

推荐答案

这似乎是webapi.odata中的错误:

It seems to be a bug in webapi.odata:

https://aspnetwebstack.codeplex.com/workitem/1937

但是我认为当前的行为是跳过null扩展属性,而不是引发异常.

But I think the current behavior is to skip the null expanded property rather than throw exception.

您可以尝试将参考文献更新为最新版本吗?

Can you try updating the reference to latest version?

这篇关于OData扩展为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆