c# - Newtonsoft自定义忽略约定

标签 c# .net serialization json.net

我想忽略类中的某些属性,但出于多种原因我想保留 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/

相关文章:

.net - 如何在 Excel 中表达 NaN 值?

c# - WPF - 图像源 - 不在预期范围内

c# - 如何使用 AutoMapper 将数据填充回 DataTable?

c# - 通过序列化支持的单例类

c# - 根据拦截和返回值自动重试客户端 WCF 调用

c# - 继承自非泛型 LineSegmentClass 的泛型 Vector 类

Django休息框架: Do not return array but list of objects with id as key

mysql - Rails 在数据库中创建和更新数组

c# - 在 C# 中限制文本框小数输入的最佳方法

c# - 创建自定义 JsonConverter 来处理 System.Text.Encoding 对象