我正在使用带有实体框架的ASP.NET Web API。我将默认的序列化程序更改为JSON.NET(因为默认的DataContractSerializer根本不适用于EF)。现在它好多了(至少起作用了),但仍然不完美。在发送GET请求后,我从一个表中获得所有属性,再加上导航属性中的大量数据(所以基本上所有来自与我想获得的实体有关系的其他实体的数据…)。如何使其仅序列化此实体中的字段而不序列化导航属性?
感谢的帮助
尝试禁用延迟加载。
Json序列化程序正在遍历实体的属性以序列化它们,因此也在调用导航属性的getter。调用导航属性的getter=触发延迟加载。加载被延迟了一点,但直到序列化程序到达导航属性,并导致额外的数据库查询获取子属性值,然后这些子属性值也被序列化。
禁用Lazy加载可以有效地从JSON序列化中删除关系内容,但导航属性仍将显示在JSON中。
如果这些导航属性对您不可用,或者在控制器中选择所需的属性,您可能必须从模型中删除这些导航属性。
如果尚未安装Newtonsoft.json Nuget软件包,请添加该软件包(该软件包未包含在.NET Core中,因此您需要Microsoft.AspNetCore.Mvc.NewtonsoftJson Nuget软件包)
在实体类中添加
using Newtonsoft.Json;
用标记实体类中的导航属性
[JsonIgnore]
例如
[JsonIgnore]
public MyProperty? MyProperty { get; set; }