我花了几天时间来了解我的工作的问题,但没有运气。
- 我创造了新的MVC4的Web API项目。
- 添加EF5与我的数据库(项目>添加> ADO.NET实体数据模型>从数据库是在SQL Azure中创建)。
- 添加两个表如下EDMX。 和两个* .TT文件生成实体和模型类成功。
我可以看到断点(结果)给出的查询结果正常。 但是JSON给人异常流,而不错误消息。 (即, http://localhost:41813/api/sheet/157
。返回“157”,它不能下载在一般情况下, “157.json”被下载)
我的结果我的手工制作的POCO风格类复制的属性和它的作品。
什么是我的问题吗? 我不能使用生成的模型类的Json通过发送数据。 我很难找出问题,因为任何错误信息,结果断点后可用的调试步骤。
序列化失败的原因是你的导航属性 -而串行器试图走它们会导致循环依赖的对象图。
为了您简单的示例工作,你周围有几个方法。
- 删除导航属性
Sheet
从SheetDetail
- 与导航属性裹在视图模型类的对象
Sheet
省略 - 创建元数据类
JsonIgnoreAttribute
然后将其与部分类,并连接到您的实体MetadataTypeAttribute
在这里,你可以找到第三种解决方案样品(样品做了一些假设,因为我不知道你的确切数据类型):
public class SheetDetailSerializationMetadata
{
[JsonIgnore]
public Sheet Sheet { get; set; }
}
[MetadataType(typeof(SheetDetailSerializationMetadata))]
public partial class SheetDetail
{
}
作为@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?