Newtonsoft自定义忽略约定

时间:2013-03-11 07:16:04

标签: c# .net serialization json.net

我想忽略一个类中的某些属性,但我想保留类POCO有很多原因。因此,我不想将依赖引入Json.NET,也不想使用JsonIgnoreAttribute

是否有某种方法可以自定义合约解析程序以尊重其他约定?例如,以“NonSerialized”一词命名的属性,或者至少是我们自己选择的内部创建的自定义属性(再次消除外部依赖性并保持域模型尽可能纯)。

另外,不同的持久性需要以不同的方式忽略/尊重相同的属性,因此能够通过某种流畅的api控制在运行时序列化的内容会很好。这甚至可能吗?

1 个答案:

答案 0 :(得分:3)

对于字段,您可以使用System命名空间中的[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。