Serialization 使用“在列表上展开”属性:参数的类型必须为';IEnumerable';。奥达塔

Serialization 使用“在列表上展开”属性:参数的类型必须为';IEnumerable';。奥达塔,serialization,asp.net-web-api,odata,Serialization,Asp.net Web Api,Odata,我在OData(5.5.0-alpha2)中使用Asp.NETWebAPI。 我有一个模型: public class Model { public List<Event> Events { get; set; } public List<User> Subscribers { get; set; } public User Owner { get; set; } .... } 一切都好。但如果我尝试获取事件: http://site.c

我在OData(5.5.0-alpha2)中使用Asp.NETWebAPI。 我有一个模型:

public class Model
{
    public List<Event> Events { get; set; }
    public List<User> Subscribers { get; set; }
    public User Owner { get; set; }
    ....
}
一切都好。但如果我尝试获取事件:

http://site.com/odata/Models()?$expand=Events
这给我带来了一个例外:

The argument must be of type 'IEnumerable'.&#xD; Parameter name: graph
我不能将列表更改为IEnumerable,为什么列表是IEnumerable时它会告诉我这个

<?xml version="1.0" encoding="utf-8"?>
<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/atom+xml; charset=utf-8'.</m:message>
    <m:type>System.InvalidOperationException</m:type>
    <m:stacktrace></m:stacktrace>
    <m:internalexception>
      <m:message>The argument must be of type 'IEnumerable'.&#xD;
Parameter name: graph</m:message>
      <m:type>System.ArgumentException</m:type>
      <m:stacktrace>   at System.Web.Http.OData.Formatter.Serialization.ODataCollectionSerializer.CreateODataValue(Object graph, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEdmTypeSerializer.CreateProperty(Object graph, String elementName, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructuralProperty(IEdmStructuralProperty structuralProperty, EntityInstanceContext entityInstanceContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructuralPropertyBag(IEnumerable`1 structuralProperties, EntityInstanceContext entityInstanceContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateEntry(SelectExpandNode selectExpandNode, EntityInstanceContext entityInstanceContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperty(KeyValuePair`2 navigationPropertyToExpand, EntityInstanceContext entityInstanceContext, ODataWriter writer)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperties(IDictionary`2 navigationPropertiesToExpand, EntityInstanceContext entityInstanceContext, ODataWriter writer)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObject(Object graph, ODataMessageWriter messageWriter, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.&lt;&gt;c__DisplayClassa.&lt;WriteToStreamAsync&gt;b__9()&#xD;
   at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)&#xD;
--- End of stack trace from previous location where exception was thrown ---&#xD;
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)&#xD;
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;
   at System.Web.Http.WebHost.HttpControllerHandler.&lt;WriteBufferedResponseContentAsync&gt;d__10.MoveNext()</m:stacktrace>
    </m:internalexception>
  </m:innererror>
</m:error>

发生了一个错误。
'ObjectContent'1'类型未能序列化内容类型'application/atom+xml'的响应正文;字符集=utf-8'。
System.InvalidOperationException异常
参数的类型必须为“IEnumerable”。
;
参数名称:图形
System.ArgumentException
在System.Web.Http.OData.Formatter.Serialization.ODataCollectionSerializer.CreateODataValue(对象图,ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataedTypeSerializer.CreateProperty(对象图、字符串元素名称、ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructuralProperty(IEdmStructuralProperty structuralProperty,EntityInstanceContext EntityInstanceContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructurePropertyBag(IEnumerable`1 structuralProperties,EntityInstanceContext EntityInstanceContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateEntry(选择ExpandNode选择ExpandNode,EntityInstanceContext EntityInstanceContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(对象图、ODataWriter、ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(对象图、ODataWriter writer、ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable,ODataWriter writer,ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(对象图、ODataWriter-writer、ODataSerializerContext-writeContext)和#xD;
在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、ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(对象图、ODataWriter writer、ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable,ODataWriter writer,ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(对象图、ODataWriter-writer、ODataSerializerContext-writeContext)和#xD;
在System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObject(对象图、ODataMessageWriter messageWriter、ODataSerializerContext writeContext)和#xD;
在System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.c_uDisplayClassA.WriteToStreamAsyncb_u9()&xD;
在System.Threading.Tasks.TaskHelpers.RunSynchronously(操作操作、取消令牌)和#xD;
---来自引发异常的前一个位置的堆栈结束跟踪---
;
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)和xD;
在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)和xD;
在System.Web.Http.WebHost.HttpControllerHandler.WriteBufferedResponseContentSyncd_uu10.MoveNext()中

如果您使用的是最新的稳定ODataLib 5.4.0版本,是否存在相同的异常?是的,它在5.4.0中工作。似乎这是阿尔法版本中的错误。
The argument must be of type 'IEnumerable'.&#xD; Parameter name: graph
<?xml version="1.0" encoding="utf-8"?>
<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/atom+xml; charset=utf-8'.</m:message>
    <m:type>System.InvalidOperationException</m:type>
    <m:stacktrace></m:stacktrace>
    <m:internalexception>
      <m:message>The argument must be of type 'IEnumerable'.&#xD;
Parameter name: graph</m:message>
      <m:type>System.ArgumentException</m:type>
      <m:stacktrace>   at System.Web.Http.OData.Formatter.Serialization.ODataCollectionSerializer.CreateODataValue(Object graph, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEdmTypeSerializer.CreateProperty(Object graph, String elementName, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructuralProperty(IEdmStructuralProperty structuralProperty, EntityInstanceContext entityInstanceContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateStructuralPropertyBag(IEnumerable`1 structuralProperties, EntityInstanceContext entityInstanceContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.CreateEntry(SelectExpandNode selectExpandNode, EntityInstanceContext entityInstanceContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperty(KeyValuePair`2 navigationPropertyToExpand, EntityInstanceContext entityInstanceContext, ODataWriter writer)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteExpandedNavigationProperties(IDictionary`2 navigationPropertiesToExpand, EntityInstanceContext entityInstanceContext, ODataWriter writer)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteEntry(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteFeed(IEnumerable enumerable, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObjectInline(Object graph, ODataWriter writer, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.Serialization.ODataFeedSerializer.WriteObject(Object graph, ODataMessageWriter messageWriter, ODataSerializerContext writeContext)&#xD;
   at System.Web.Http.OData.Formatter.ODataMediaTypeFormatter.&lt;&gt;c__DisplayClassa.&lt;WriteToStreamAsync&gt;b__9()&#xD;
   at System.Threading.Tasks.TaskHelpers.RunSynchronously(Action action, CancellationToken token)&#xD;
--- End of stack trace from previous location where exception was thrown ---&#xD;
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)&#xD;
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)&#xD;
   at System.Web.Http.WebHost.HttpControllerHandler.&lt;WriteBufferedResponseContentAsync&gt;d__10.MoveNext()</m:stacktrace>
    </m:internalexception>
  </m:innererror>
</m:error>