我正在使用C#Json.Encode
向我們的DOM中添加一些數據。ASP.NET CORE Razor,如何配置Json.Encode來忽略循環引用?
<div data-model='@Json.Encode(cliente)'>
但是在我們的模型中有一些循環引用。
是否可以配置全局轉換器忽略這些循環引用?
我正在使用C#Json.Encode
向我們的DOM中添加一些數據。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
參考,在那裏,因爲它忽略。
雖然你只能這樣做。如果您從Bar
的實例開始,則完全不會獲得Foo
參考,因爲它再次被忽略。如果你需要處理像這樣的各種不同的場景,你需要利用單獨的類(稱之爲視圖模型,DTO,不管),只需簡單地設置它,以便首先不存在循環引用。這不是一個壞主意,一般。換句話說,您可以首先使用定製類而不是[ScriptIgnore]
。
添加腳本忽略是不夠的,它必須被添加'scriptignore' with'override' –
只有確實你重寫屬性,即該屬性已經在基類中沒有該屬性定義。 –
只是澄清。我必須添加'[ScriptIgnore(ApplyToOverrides = true)]'屬性。我沒有創建任何其他類覆蓋它。但是我懷疑ASP.NET創建了一個覆蓋我的類的動態類型。 –
不知道,但我認爲你可以裝飾模型的屬性,以防止序列化,因此,循環引用:https://msdn.microsoft.com/en-us/library/system.web.script.serialization。 scriptignoreattribute.aspx – Stefan