【问题标题】:Newtonsoft custom ignore conventionNewtonsoft 自定义忽略约定
【发布时间】:2013-03-11 07:16:04
【问题描述】:

我想忽略类中的某些属性,但出于多种原因我想保留类 POCO。因此我不想引入对 Json.NET 的依赖,也不想使用JsonIgnoreAttribute

有没有办法自定义合约解析器以遵守其他约定?例如,以单词“NonSerialized”开头的属性,或者至少是我们自己选择的内部创建的自定义属性(再次消除外部依赖并保持域模型尽可能纯)。

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

【问题讨论】:

    标签: c# .net serialization json.net


    【解决方案1】:

    对于字段,您可以使用 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。

    【讨论】:

    • 总比没有好,但我希望有一种方法可以在域模型之外完全做到这一点。但我会拿走我能得到的。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2019-09-23
    • 2010-09-10
    • 2021-10-09
    • 2011-03-31
    • 2014-10-09
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多