2017-05-02 54 views
0

我正在使用C#Json.Encode向我們的DOM中添加一些數據。ASP.NET CORE Razor,如何配置Json.Encode來忽略循環引用?

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

但是在我們的模型中有一些循環引用。

是否可以配置全局轉換器忽略這些循環引用?

+1

不知道,但我認爲你可以裝飾模型的屬性,以防止序列化,因此,循環引用:https://msdn.microsoft.com/en-us/library/system.web.script.serialization。 scriptignoreattribute.aspx – Stefan

回答

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]

+0

添加腳本忽略是不夠的,它必須被添加'scriptignore' with'override' –

+0

只有確實你重寫屬性,即該屬性已經在基類中沒有該屬性定義。 –

+0

只是澄清。我必須添加'[ScriptIgnore(ApplyToOverrides = true)]'屬性。我沒有創建任何其他類覆蓋它。但是我懷疑ASP.NET創建了一個覆蓋我的類的動態類型。 –