2013-03-11 99 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