【问题标题】:How to ignore navigation properties when serializing序列化时如何忽略导航属性
【发布时间】:2012-10-05 22:43:16
【问题描述】:

我正在使用带有实体框架的 ASP.NET Web API。 我将我的默认序列化程序更改为 JSON.NET(因为默认的 DataContractSerializer 对 EF 根本不起作用)。 现在它更好了(至少它正在工作),但仍然不完美。发送 GET 请求后,我从一个表中获取所有属性以及来自导航属性的大量数据(因此基本上所有来自与我想要获取的实体有关系的其他实体的数据......)。 我怎样才能让它只序列化来自这个实体的字段而不是导航属性?

感谢您的帮助

【问题讨论】:

  • 我会说:禁用延迟加载并测试是否有帮助。
  • 谢谢!有效!但我不确定为什么。延迟加载基本上会延迟加载数据,那么为什么会导致它呢?
  • 酷!我已将我的评论转换为带有附加解释的答案。

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


【解决方案1】:

尝试禁用延迟加载。

Json 序列化程序正在遍历您的实体的属性以对其进行序列化,因此也正在调用导航属性的 getter。调用导航属性的 getter = 触发延迟加载。加载延迟了一点,但直到序列化程序到达导航属性并导致额外的数据库查询来获取随后也被序列化的子属性值。

【讨论】:

    【解决方案2】:

    禁用延迟加载会有效地从 JSON 序列化中删除关系内容,但导航属性仍会出现在 JSON 中。

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

    【讨论】:

    • 在 EF 6 中不做任何事情
    • 加上 AsNoTracking() 到你的实体获取,它会。
    猜你喜欢
    • 2019-08-02
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    相关资源
    最近更新 更多