XmlSerialization与单身

序列化的困境继续 ……

我正在尝试序列化一个类,这些类的实例在它们之间共享公共对象(各种类型的绑定器)。 因此,对象A,B,C共享对象Binder1,对象D和E – Binder2等等……我正在序列化对象A,B,C,D,E。 通常,此绑定器对象在构造函数中传递 – 而不是使用序列化程序,因为它需要无参数构造函数。

ISeriazable似乎有一些适用于单例的东西 – IObjectReference接口,其中方法GetRealObject可用于返回对新创建的单例的引用。 但是,它看起来不像XmlSerializer关心这个接口。

那么,我应该如何序列化/反序列化这些对象呢?

编辑 :我几乎已经准备好放弃这个问题,因为我刚刚在两个巨头@JonSkeet和@MarcGravell之间的2006年(!!) 论坛上发现了这个问题 ,其中XmlSerializer的答案基本上没有 。 为了防止过去7年的情况发生变化,我会将此问题保持更长时间。

我还没有找到一种方法来使用XmlSerializer本地执行此操作。 我确实在Jon Skeet和Marc Gravell之间找到了一个旧线程 ,基本上说你不能用与ISerializable和IObjectReference相同的方式做到这一点。

我必须完成这项工作的方式如下:

  • 将Guid字段添加到Binder对象(即多个对象共享的公共对象)
  • 在反序列化期间,使用静态字典并使用已注册的Binder对象和相同的Guid,或者将新的Binder对象添加到静态字典中以供其他人链接。