为什么Web Api返回空的json结果为"$ ref ="?

Dan*_*nte 6 .net json asp.net-mvc-4 asp.net-web-api

我在EF5中禁用了延迟加载和代理创建,然后在Web Api中返回任何结果.一切都很好.但是,当我开始Include()其他实体进行急切提取时,一些JSON对象如下所示:

{
$ref: "14"
},
.. correct objects ..
{
$ref: "6"
},
..
Run Code Online (Sandbox Code Playgroud)

这是什么"$ref"包含在结果列表中?

Dar*_*rov 14

它来自JSON.NET序列化程序.它保留了对象引用.看看吧following blog post.我猜你的对象图中有一些循环引用,JSON.NET最擅长序列化这个EF结构而不会崩溃(这是大多数JSON序列化程序无论如何都要做的).但这不是一个标准.

个人建议:永远不要序列化您的EF实体.始终定义视图模型,并让Web API方法返回仅包含您感兴趣的属性的视图模型.