为什么 YamlDotNet 不序列化 class 的私有字段?

Why doesn't YamlDotNet serialize private fields of the class?

我试图在网上寻找答案,但没有成功。相反,我在不同的帖子中多次遇到“私有字段……永远不会被序列化”这样的短语。所以我想这不是错误而是哲学。

但是我不明白这一点。 class 如何在没有负责 class 内部逻辑的私有成员的情况下被序列化然后恢复?

YamlDotNet 默认仅序列化 public 属性的原因是否则会破坏封装。访问私有成员意味着模型将无法保证其不变量。如果您与其他库进行比较,例如 Json.NET,您会发现它们使用相同的方法。

我认为这不是问题,因为您不应该直接(反)序列化您的域模型。这样做会将您的域模型限制为您的序列化模式,在许多情况下需要不同。这与尝试将域模型映射到关系数据库的问题相同。

相反,您应该定义一个序列化模型并在您的域模型和该序列化模型之间进行映射。在这种情况下,不需要序列化私有字段。

就是说,如果您真的想序列化私有字段,那是很容易做到的。你需要 注册您自己的 ITypeInspector that returns private fields. You can base your implementation on ReadableFieldsTypeInspector.

实现