据我了解,大多数序列化/反序列化技术使用反射来创建对象并设置或获取值。那么为什么要在类中显式绑定这些属性,例如 [XmlIgnore]... 用于 xml,[Serializable]... 在二进制序列化中,[JsonPropery]...Json.Net 等。既然这些就对象而言就像横切关注点,我们不能在对象之外做同样的事情吗?
如果关注点分开,用户可以控制对象图/树的哪一部分需要在哪个上下文以及如何进行序列化/反序列化等?
是否有任何这样的框架使整个序列化成为方面,即在类的关注之外?
Edit1:我的要求如下我的应用程序将数据存储在一个巨大的树形结构中。客户的要求是能够以 xml 格式序列化某些数据,以及 Json 中的某些数据(我不知道为什么这样要求),我们将大部分数据以二进制序列化为遗留代码。
现在有一些类,其中一部分数据需要以 XML 格式显示,而另一部分(这些也可以是 xml 数据或二进制序列化数据的一部分)在 Json 中。
所以我正在寻找一个解决方案
- 类不应该知道任何特定于序列化的属性,相反,序列化程序框架可以提供足够的工具来轻松地进行序列化而无需触及类。
- 该框架应该允许保留我想要的私有和公共数据。这可以特定于类或实例,也可以特定于某些上下文中实例的某些属性。
例如- SaveTemplate:应该只保存树的每个分支中的几个节点
- SaveDocument:应该完全保存树中的一个分支
- SavePackage:应该保存整个树。
- 应该允许序列化为不同的格式,如 xml、二进制、json 等以用于不同的目的。
所以我计划评估某些序列化框架以实现相同的目标。我发现 Json.Net 可以给我以下
- 没有像xml 序列化一样为公共属性放置序列化标签。
- 向后兼容二进制序列化。即我不必更改二进制序列化接口实现
- 不需要参数少的构造函数。
但是,我仍然需要上面第 2) 和 3) 点中提到的能力。我还没有详细探索过 Json.Net 或任何其他框架。
有什么框架可以帮助我实现同样的目标吗?