1

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

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

在此处输入图像描述

我可以看到断点(结果)正常给出查询结果。 但是json给出了异常流而没有错误消息。(即http://localhost:41813/api/sheet/157返回无法下载的“157”,一般情况下会下载“157.json”)

在此处输入图像描述

我将结果中的属性复制到我手工制作的 POCO 样式类中,它可以工作。

我的问题是什么?我不能使用生成的模型类通过 Json 发送数据。我几乎没有发现问题,因为在结果断点之后没有错误消息并且没有可用的调试步骤。

4

2 回答 2

6

序列化失败的原因是您的导航属性- 当序列化程序试图遍历对象图时,它们会导致循环依赖。

为了让您的简单示例正常工作,您几乎没有办法解决它。

  1. 从中删除导航属性 SheetSheetDetail
  2. 将您的对象包装在ViewModel类中,并省略导航属性 Sheet
  3. 创建一个元数据类,JsonIgnoreAttribute然后使用部分类将其附加到您的实体和MetadataTypeAttribute

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

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

[MetadataType(typeof(SheetDetailSerializationMetadata))]
public partial class SheetDetail
{ 
}
于 2012-10-25T07:00:58.450 回答
0

正如@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;
于 2014-02-16T13:44:52.930 回答