2013-03-11 101 views
2

我想忽略某個類中的某些屬性,但我想保留類POCO的原因很多。因此我不想引入對Json.NET的依賴關係,也不想使用JsonIgnoreAttributeNewtonsoft自定義忽略約定

是否有某種方法可以自定義合約解析器以遵守其他約定?例如,以單詞「NonSerialized」開頭的屬性,或者至少是我們自己選擇的內部創建的自定義屬性(再次以消除外部依賴並保持域模型儘可能純)。

另外,不同的持久性需要忽略/尊重相同的屬性,所以能夠控制什麼在運行時通過某種流利的API進行序列化會很好。這甚至有可能嗎?

回答

3

對於字段,您可以使用System namespace中的[NonSerializable]屬性來避免序列化。這樣你就不需要依賴外部庫。這不適用於屬性。

對於屬性,有一個稱爲條件屬性序列化的功能。基本上,你實現的方法返回布爾值,並遵循命名約定 - ShouldSerialize[PropertyName]

public class LoginModel 
{ 
    public string UserName { get; set; } 

    public string Password { get; set; } 

    public bool RememberMe { get; set; } 

    public bool ShouldSerializePassword() { return false; } 
} 

這個例子總是避免序列化PasswordShouldSerialize方法可以包含更復雜的驗證邏輯,而不是簡單地返回false。

+1

這比沒有好,但我希望有一種方法可以完全在域模型之外完成此操作。但我會拿我能得到的。謝謝你的幫助。 – Alwyn 2013-03-11 16:48:03