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年发生了变化。

XmlSerialization with a singleton

我还没有找到用XmlSerializer本机实现这一点的方法。我确实在Jon Skeet和Marc Gravell之间找到了一条老线索,基本上说你不能像使用ISerializable和IObjectReference那样做。

我做这项工作的方式是沿着以下几条线:

  • 将Guid字段添加到Binder对象(即多个对象共享的公共对象)
  • 在反序列化过程中,请使用静态字典,然后使用具有相同Guid的已注册Binder对象,或者向静态字典中添加新的Binder对象以供其他人链接