DOMにデータを追加するにはC#Json.Encode
を使用しています。ASP.NET CORE Razor、円参照を無視するようにJson.Encodeを設定するにはどうすればよいですか?
<div data-model='@Json.Encode(cliente)'>
ただし、私たちのモデルにはいくつかの循環参照があります。
これらの循環参照を無視するようにグローバルコンバータを構成することはできますか。
DOMにデータを追加するにはC#Json.Encode
を使用しています。ASP.NET CORE Razor、円参照を無視するようにJson.Encodeを設定するにはどうすればよいですか?
<div data-model='@Json.Encode(cliente)'>
ただし、私たちのモデルにはいくつかの循環参照があります。
これらの循環参照を無視するようにグローバルコンバータを構成することはできますか。
[ScriptIgnore]
属性を循環参照を開始するプロパティに追加します。たとえば:
public class Foo
{
public Bar Bar { get; set; }
}
public class Bar
{
[ScriptIgnore]
public Foo Foo { get; set; }
}
だから、あなたがfoo
のインスタンスを持っていると仮定すると、JSONシリアライザはBar
参照掘り下げますが、それは無視されますので、そこに、Foo
参照に続行されません。
ただし、この方法は1通りしかできません。 Bar
のインスタンスで開始すると、Foo
の参照はまったく取得されません。これは、単に無視されるためです。このようなさまざまなシナリオを処理する必要がある場合は、個別のクラス(ビューモデル、DTOなど)を使用する必要があります。循環参照が最初に存在しないように設定するだけです。これはちょうど良いことではない、一般に。つまり、最初に[ScriptIgnore]
の代わりにカスタムビルドされたクラスを使用することができます。
スクリプトの無視を追加するだけでは不十分です。 'override 'で' scriptignore'を追加する必要があります –
実際にあなたがプロパティをオーバーライドしている場合、つまりそのプロパティは基本クラスの属性なしで既に定義されています。 –
を明確にする。属性に '[ScriptIgnore(ApplyToOverrides = true)]'を追加する必要があります。私はそれを上書きする他のクラスを作成していません。しかし、私はASP.NETが私のクラスをオーバーライドする動的型を作成すると思われます。 –
確かにわかりませんが、モデルのプロパティを飾ることで、シリアル化や循環参照を防ぐことができると思います。https://msdn.microsoft.com/en-us/library/system.web.script.serialization scriptignoreattribute.aspx – Stefan