我花了好几天才知道我工作中的问题,但没有运气。
我可以看到断点(结果)正常显示查询结果。
但是json给出了异常流而没有错误消息。 (即,http://localhost:41813/api/sheet/157
返回" 157"无法下载。一般来说," 157.json"已下载)
我将结果中的属性复制到我手工制作的POCO风格的课程中,并且有效。
我的问题是什么?我不能使用生成的模型类通过Json发送数据。 我几乎没有发现问题,因为在结果断点之后没有错误消息和可用的调试步骤。
答案 0 :(得分:6)
序列化失败的原因是你的导航属性 - 当序列化程序试图遍历对象图时,它们会导致循环依赖。
为了让你的简单样本发挥作用,你几乎无法解决它。
Sheet
SheetDetail
Sheet
省略 ViewModel 类中的对象JsonIgnoreAttribute
创建元数据类,然后将其附加到具有部分类MetadataTypeAttribute
在这里你可以找到第三个解决方案的样本(样本做了一些假设,因为我不知道你的确切数据类型):
public class SheetDetailSerializationMetadata
{
[JsonIgnore]
public Sheet Sheet { get; set; }
}
[MetadataType(typeof(SheetDetailSerializationMetadata))]
public partial class SheetDetail
{
}
答案 1 :(得分: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;