XmlSerialization with a singleton
本文关键字:singleton with XmlSerialization | 更新日期: 2023-09-27 18:22:33
序列化问题仍在继续。。。
我正在尝试序列化一个类,这些类的实例之间共享公共对象(某种绑定器)。所以,对象A、B、C共享对象Binder1,对象D和E-Binder2,等等…我正在序列化对象A、B、C、D、E。通常,这个绑定对象是在构造函数中传递的,而不是与序列化程序一起传递,因为它需要一个无参数的构造函数。
ISerializable似乎有一些适用于singleton的东西——IObjectReference
接口,其中方法GetRealObject
可以用来返回对新创建的singleton的引用。但是,看起来XmlSerializer
并不关心这个接口。
那么,我应该如何序列化/反序列化这些对象呢?
编辑:我几乎准备放弃这个问题,因为我刚刚在2006年的一个论坛上发现了这个问题(!),两个巨头@JonSkeet和@MarcGravell在论坛上讨论过,XmlSerializer的答案基本上是否。我会把这个问题再提一段时间,以防过去7年发生了变化。
我还没有找到用XmlSerializer本机实现这一点的方法。我确实在Jon Skeet和Marc Gravell之间找到了一条老线索,基本上说你不能像使用ISerializable和IObjectReference那样做。
我做这项工作的方式是沿着以下几条线:
- 将Guid字段添加到Binder对象(即多个对象共享的公共对象)
- 在反序列化过程中,请使用静态字典,然后使用具有相同Guid的已注册Binder对象,或者向静态字典中添加新的Binder对象以供其他人链接