使用单例的Xml序列化

时间:2013-07-16 02:45:14

标签: c# xml-serialization xml-deserialization

序列化困扰continue ...

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

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

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

编辑:我几乎已经准备好放弃这个问题了,因为我刚从2006年发现这个question discussed on a forum (!!)在两个巨人之间@JonSkeet和@MarcGravell,XmlSerializer的答案基本上是 no 。如果事情在过去7年里发生了变化,我会将这个问题保持更长时间。

1 个答案:

答案 0 :(得分:0)

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

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

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