如何在序列化时忽略导航属性

时间:2012-03-12 21:01:15

标签: entity-framework json.net asp.net-web-api

我正在使用ASP.NET Web API和Entity Framework。 我将默认的序列化程序更改为JSON.NET(因为默认的DataContractSerializer并不适用于EF)。 现在它变得更好(它至少起作用),但仍然不完美。在发送GET请求之后,我从一个表中获取所有属性以及来自导航属性的大量数据(所以基本上所有来自与我想要获得的实体有关系的其他实体的数据......)。 如何使其仅序列化此实体中的字段而不是导航属性?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

尝试禁用延迟加载。

Json序列化程序正在迭代实体的属性以序列化它们,因此也调用导航属性的getter。调用导航属性的getter =触发延迟加载。加载延迟了一段时间,但直到序列化程序到达导航属性并导致额外的数据库查询来获取子属性值,然后这些值已被序列化。

答案 1 :(得分:2)

禁用延迟加载可以有效地从JSON序列化中删除关系内容,但导航属性仍将显示在JSON中。

如果这些导航属性对您没用,或者在您的控制器中选择所需的属性,则可能必须从模型中删除这些属性。