我想忽略类中的某些属性,但出于多种原因我想保留 POCO 类。因此,我不想引入对 Json.NET 的依赖,也不想使用 JsonIgnoreAttribute
。
是否有某种方法可以自定义契约(Contract)解析器以遵守其他约定?例如,以“NonSerialized”一词开头的属性,或者至少是我们自己选择的内部创建的自定义属性(同样是为了消除外部依赖性并保持域模型尽可能纯净)。
此外,不同的持久性需要以不同的方式忽略/尊重相同的属性,因此如果能够通过某种流畅的 API 来控制在运行时序列化的内容,那就太好了。这可能吗?
最佳答案
对于字段,您可以使用系统命名空间中的[NonSerialized]
属性,以避免序列化。这样您就不再依赖外部库。这不适用于属性。
对于属性,有一个称为条件属性序列化的功能。基本上,您实现返回 bool 值并遵循命名约定的方法 - 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; }
}
此示例始终避免序列化密码
。 ShouldSerialize
方法可以包含更复杂的验证逻辑,而不是简单地返回 false。
关于c# - Newtonsoft自定义忽略约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15333105/