为什么我的超级简单的ASP.NET Web API(mvc4)+实体框架5不起作用?(Why my

2019-07-02 13:20发布

我花了几天时间来了解我的工作的问题,但没有运气。

  1. 我创造了新的MVC4的Web API项目。
  2. 添加EF5与我的数据库(项目>添加> ADO.NET实体数据模型>从数据库是在SQL Azure中创建)。
  3. 添加两个表如下EDMX。 和两个* .TT文件生成实体和模型类成功。

我可以看到断点(结果)给出的查询结果正常。 但是JSON给人异常流,而不错误消息。 (即, http://localhost:41813/api/sheet/157 。返回“157”,它不能下载在一般情况下, “157.json”被下载)

我的结果我的手工制作的POCO风格类复制的属性和它的作品。

什么是我的问题吗? 我不能使用生成的模型类的Json通过发送数据。 我很难找出问题,因为任何错误信息,结果断点后可用的调试步骤。

Answer 1:

序列化失败的原因是你的导航属性 -而串行器试图走它们会导致循环依赖的对象图。

为了您简单的示例工作,你周围有几个方法。

  1. 删除导航属性 SheetSheetDetail
  2. 导航属性裹在视图模型类的对象Sheet省略
  3. 创建元数据类JsonIgnoreAttribute然后将其与部分类,并连接到您的实体MetadataTypeAttribute

在这里,你可以找到第三种解决方案样品(样品做了一些假设,因为我不知道你的确切数据类型):

public class SheetDetailSerializationMetadata
{
    [JsonIgnore]
    public Sheet Sheet { get; set; }
}

[MetadataType(typeof(SheetDetailSerializationMetadata))]
public partial class SheetDetail
{ 
}


Answer 2:

作为@danludwig评论, http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization给出了关于我的问题的所有答案。

添加以下代码在Global.asax中解决了这个问题。

var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
json.SerializerSettings.PreserveReferencesHandling = 
Newtonsoft.Json.PreserveReferencesHandling.All;


文章来源: Why my super simple ASP.NET Web API (mvc4)+Entity Framework 5 doesn't work?