【问题标题】:ASP.NET CORE Razor, how configure Json.Encode to ignore circular references?ASP.NET CORE Razor,如何配置 Json.Encode 忽略循环引用?
【发布时间】:2017-09-30 08:56:36
【问题描述】:

我正在使用 C# Json.Encode 将一些数据添加到我们的 DOM 中。

<div data-model='@Json.Encode(cliente)'>

但是,我们的模型中有一些循环引用。

是否可以将全局转换器配置为忽略那些循环引用?

【问题讨论】:

标签: json asp.net-mvc razor


【解决方案1】:

[ScriptIgnore] 属性添加到将启动循环引用的属性。例如:

public class Foo
{
    public Bar Bar { get; set; }
}

public class Bar
{
    [ScriptIgnore]
    public Foo Foo { get; set; }
}

因此,假设您有一个 foo 的实例,JSON 序列化程序将深入研究 Bar 引用,但不会继续研究 Foo 引用,因为它被忽略了。

不过,您只能以一种方式执行此操作。如果您从Bar 的实例开始,则根本不会获得Foo 引用,因为它再次被忽略。如果您需要像这样处理各种不同的场景,您将需要使用单独的类(称它们为视图模型、DTO 等),您只需在其中进行设置,以便一开始就不存在循环引用。 总的来说,这样做并不是一个坏主意。换句话说,您首先可以使用自定义构建的类而不是 [ScriptIgnore]

【讨论】:

  • 添加脚本忽略还不够,必须添加scriptignoreoverride
  • 仅当您确实要覆盖该属性时,即该属性已在基类中定义,但没有该属性。
  • 只是澄清一下。我必须将[ScriptIgnore(ApplyToOverrides = true)] 添加到属性中。我没有创建任何其他类来覆盖它。但是我确实怀疑 ASP.NET 创建了一个覆盖我的类的动态类型。
  • 如果属性是虚拟的并且您直接使用实体,那么,是的。 EF 创建了一个从实体派生的代理类来覆盖该属性。
猜你喜欢
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2020-01-12
  • 2019-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多