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

问题描述 投票:0回答:1

我试图在互联网上找到答案,但没有成功。相反,我在不同的帖子中多次遇到 "私有字段......永远不会被序列化 "的说法。所以我想这不是一个bug,而是一种哲学。

然而,我不明白这一点。如果没有负责类内部逻辑的私有成员,怎么能将类序列化,然后还原回来?

c# yamldotnet
1个回答
1
投票

之所以YamlDotNet默认只序列化公共属性,是因为如果不这样做就会破坏封装。访问私有成员将意味着模型将无法保证其不变性。如果你和其他库比较一下,比如Json.NET,你会发现他们使用了同样的方法。

我不认为这是一个问题,因为你不应该直接(去)序列化你的领域模型。这样做会将你的域模型限制在你的序列化模式上,而序列化模式在很多情况下需要不同。这与试图将你的域模型映射到关系数据库的问题是一样的。

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

也就是说,如果你真的想序列化私有字段,那是很简单的事情。你需要注册你自己的 ITypeInspector 返回私有字段。你可以基于 ReadableFieldsTypeInspector.

© www.soinside.com 2019 - 2024. All rights reserved.