当按键</t>查询时,SingleResult <t>在Web API中不可序列化

时间:2014-03-31 14:41:40

标签: odata wcf-data-services asp.net-web-api asp.net-web-api-odata

使用以下命令尝试使用针对odata web.api的主键CourseID查找单个记录:

var editedcourse = container.Courses.Where(c => c.CourseID == ID).SingleOrDefault();

这是错误:

    <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>'SingleResult`1' cannot be serialized using the ODataMediaTypeFormatter.</m:message>
      <m:type>System.Runtime.Serialization.SerializationException</m:type>

3 个答案:

答案 0 :(得分:5)

默认情况下,web.api控制器方法不可查询,因此客户端失败。添加了注释以修复:[Queryable(AllowedOrderByProperties = "Id")]

答案 1 :(得分:1)

尝试将以下代码添加到WebApiConfig.cs文件中。

var json = config.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects;
config.Formatters.Remove(config.Formatters.XmlFormatter);

如果您不使用Json格式,我认为前两行是可选的。

参考 http://social.msdn.microsoft.com/Forums/vstudio/en-US/a5adf07b-e622-4a12-872d-40c753417645/web-api-error-the-objectcontent1-type-failed-to-serialize-the-response-body-for-content?forum=wcf

答案 2 :(得分:0)

我认为你必须确保加载任何关系。作为一种解决方法,您可以创建一个新的DTO(数据传输对象)并将所有需要放在其中。