gpt4 book ai didi

c# - Newtonsoft 自定义忽略约定

转载 作者:行者123 更新时间:2023-11-30 22:19:52 27 4
gpt4 key购买 nike

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

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

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

最佳答案

对于字段,您可以使用系统命名空间中的 [NonSerializable] 属性,以避免序列化。这样你就没有对外部库的依赖。这不适用于属性。

对于属性,有一个称为条件属性序列化 的功能。基本上,您实现返回 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; }
}

此示例将始终避免序列化 PasswordShouldSerialize 方法可以包含更复杂的验证逻辑,而不是简单地返回 false。

关于c# - Newtonsoft 自定义忽略约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15333105/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com