4

我正在编写一个程序,它构建了一个树类结构,它由类继承自一个抽象类Node。我的程序中内置了许多不同类型的节点。不过,我也想让更高级的用户能够引用我的库并编写他们自己的派生Node。这些插件库随后在我的应用程序启动时通过Assembly.Load()加载。因此,我的应用程序使用的所有可能的Node类型在运行时才会知道。什么XML序列化方法应该用于公共API?

此外,我希望能够序列化和反序列化这些树到XML文件和从XML文件反序列化。我有一些使用XMLSerializer,DataContractSerializer和实现IXmlSerializable的经验。通常,我使用DataContractSerializer,因为它通常需要更少的代码,然后实现IXmlSerializable,并且可以序列化XmlSerializer无法使用的专用字段。

然而,在这个项目中,我还必须考虑其他用户将创建从我的类派生的类,并且还必须添加序列化它们所需的任何代码或属性。

考虑到这个原因,我应该使用一个序列化机制而不是另一个?

回答

2

如果序列化和反序列化只会发生在您的应用程序中,并且没有其他人能够读取序列化数据的要求,那么序列化格式不会影响API:就用户而言在API方面,你会序列化成一个不透明的文件,并从相同的反序列化。

在这种情况下,使用DataContractSerializer,因为它可以在需要时序列化为二进制。

+0

是的我没有看到任何程序,除了我的程序需要序列化/反序列化这些文件,我也喜欢在未来允许其他序列化格式(如二进制)的想法。 – 2010-11-19 20:08:56

+0

要明确,我的意思是“二进制”是XmlDictionaryWriter类可以发出的二进制序列化XML。我们都习惯于文本序列化的XML,但这只是一种序列化格式。 – 2010-11-19 20:10:15

+0

* @ John Saunders *定义XML仅仅是一种序列化格式太过简化...... – Luca 2010-11-19 20:56:58

相关问题