6

为什么这不起作用?:

        var surveys = db.Surveys.Where(s => s.Author.UserId == user.UserId);

        return from survey in surveys
               select new
               {
                   surveyId = survey.SurveyId,
                   title = survey.Title
               };

而这个,稍作改动,是?:

        var surveys = db.Surveys.Where(s => s.Author == user);

        return from survey in surveys
               select new
               {
                   surveyId = survey.SurveyId,
                   title = survey.Title
               };

它会引发序列化错误

The 'ObjectContent`1' type failed to serialize the response body for content type 
'application/xml; charset=utf-8'.  (...)




我可以用这种方式解决它,但我在这里(如下)有同样的错误,并且不能用同样的方式解决它:

var surveys = db.Surveys.Where(s => s.AnswerableBy(user));
4

6 回答 6

1

我最近遇到了这个问题,就我而言,问题是我有由实体框架创建的循环引用- 模型优先(公司 -> 员工 -> 公司)。

我通过简单地创建一个只有我需要的属性的视图模型对象来解决它。

于 2013-01-22T21:23:21.303 回答
1

根据Microsoft ASP.NET Web API 网站上的“处理循环对象引用”部分,将以下代码行添加到 WebAPIConfig.cs 文件的 Register 方法(应该在项目的 App_Start 文件夹中)。

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

该页面上有处理 XML 解析的单独说明。

于 2013-01-25T19:26:14.253 回答
0

您看到的异常是一般异常,可能由多种因素引起。检查InnerException序列化异常的属性,找出导致序列化失败的确切原因。

于 2012-09-09T08:58:46.963 回答
0

您正在使用匿名对象。使它成为强类型并且序列化将起作用。

于 2012-10-05T09:20:11.127 回答
0

最后,这与 Linq to Entities 与 Linq to Objects 有关。

某些 LINQ 查询无法转换为 SQL(例如使用方法:someCollection.Where(p => p.SomeMethod() == ...))。所以必须先将它们翻译到内存中(someCollection.ToList().Where...)

于 2013-05-15T15:25:10.400 回答
0

I was having the same problem. In my case the error was caused by the relation between tables created in my Dbml file. Once I removed the relation from the DBML file, it worked. I think Database relations can't be serialized.

于 2015-03-18T11:10:13.150 回答