C# 公共API应该使用什么XML序列化方法?
我正在编写一个程序,它建立一个树结构,由从抽象C# 公共API应该使用什么XML序列化方法?,c#,.net,datacontractserializer,xmlserializer,ixmlserializable,C#,.net,Datacontractserializer,Xmlserializer,Ixmlserializable,我正在编写一个程序,它建立一个树结构,由从抽象节点继承的类组成。我的程序中内置了许多不同类型的节点。但是,我还希望允许更高级的用户能够引用我的库并编写自己的节点派生。当我的应用程序启动时,通过Assembly.Load()加载这些插件库。因此,在运行时之前,我的应用程序使用的所有潜在的节点类型都是未知的 此外,我希望能够在XML文件之间序列化和反序列化这些树。我对XMLSerializer、DataContractSerializer和实现IXmlSerializable有一些经验。通常,我使用
节点继承的类组成。我的程序中内置了许多不同类型的节点。但是,我还希望允许更高级的用户能够引用我的库并编写自己的节点派生。当我的应用程序启动时,通过Assembly.Load()
加载这些插件库。因此,在运行时之前,我的应用程序使用的所有潜在的节点类型都是未知的
此外,我希望能够在XML文件之间序列化和反序列化这些树。我对XMLSerializer、DataContractSerializer和实现IXmlSerializable有一些经验。通常,我使用DataContractSerializer,因为它通常需要比实现IXmlSerializable更少的代码,并且可以序列化XmlSerializer无法序列化的私有字段
然而,在这个项目中,我还必须考虑到其他用户将创建从我的类派生的类,并且还需要添加任何代码或属性来序列化它们。
考虑到这一点,我有理由选择一种序列化机制而不是另一种吗?如果序列化和反序列化只在应用程序中发生,并且不要求其他任何人能够读取序列化数据,然后序列化格式不会影响API:就API的用户而言,您将序列化为不透明文件并从该文件反序列化
在这种情况下,请使用DataContractSerializer,因为它可以在必要时序列化为二进制文件。是的,我看不出除我的程序以外的任何程序需要序列化/反序列化这些文件的任何原因,而且我也希望将来允许使用其他序列化格式,例如二进制文件。很明显,“二进制文件”我的意思是XmlDictionaryWriter类可以发出的二进制序列化XML。我们都习惯于文本序列化XML,但这只是一种序列化格式。