C# OData扩展空

C# OData扩展空,c#,odata,C#,Odata,使用OData时,如果正在扩展的属性之一为null,则会出现此错误。有没有办法解决这个问题?我期望扩展属性的输出为null,而不是抛出任何异常 <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>

使用OData时,如果正在扩展的属性之一为null,则会出现此错误。有没有办法解决这个问题?我期望扩展属性的输出为null,而不是抛出任何异常

<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>

发生了一个错误。
'ObjectContent'1'类型未能序列化'application/json'内容类型的响应正文;字符集=utf-8'。
System.InvalidOperationException异常
类型为“[Spawtz.OData.Models.Division Nullable=True]”的EDM实例缺少属性“Id”。
System.InvalidOperationException异常
位于System.Web.Http.OData.EntityInstanceContext.GetPropertyValue(字符串propertyName)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructurePro属性(IEdmStructuralProperty StructureProperty,EntityInstanceContext EntityInstanceContext)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructurePropertyBag(IEnumerable`1 structuralProperties,EntityInstanceContext EntityInstanceContext)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateEntry(选择ExpandNode选择ExpandNode,EntityInstanceContext EntityInstanceContext)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(对象图、ODataWriter writer、ODataSerializerContext writeContext)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperty(KeyValuePair`2 navigationPropertyToExpand,EntityInstanceContext EntityInstanceContext,ODataWriter writer)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperties(IDictionary`2 navigationPropertiesToExpand,EntityInstanceContext EntityInstanceContext,ODataWriter-writer)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(对象图、ODataWriter writer、ODataSerializerContext writeContext)
位于System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable,IEdmTypeReference feedType,ODataWriter writer,ODataSerializerContext writeContext)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperty(KeyValuePair`2 navigationPropertyToExpand,EntityInstanceContext EntityInstanceContext,ODataWriter writer)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperties(IDictionary`2 navigationPropertiesToExpand,EntityInstanceContext EntityInstanceContext,ODataWriter-writer)
位于System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(对象图、ODataWriter writer、ODataSerializerContext writeContext)
位于System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable,IEdmTypeReference feedType,ODataWriter writer,ODataSerializerContext writeContext)
位于System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.WriteToStream(类型类型、对象值、流writeStream、HttpContent内容、HttpContentHeaders)
位于System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.WriteToStreamAsync(类型类型、对象值、流writeStream、HttpContent内容、TransportContext TransportContext、CancellationToken CancellationToken)
---来自引发异常的上一个位置的堆栈结束跟踪---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务任务)中
在System.Web.Http.WebHost.HttpControllerHandler.WriteBufferedResponseContentSyncd\uu 1b.MoveNext()中

这似乎是webapi.odata中的一个bug:

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

<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>

您可以尝试将引用更新到最新版本吗?

我已修复此错误,并已提交拉取请求,他们说它将在下一版本中修复