Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 公共API应该使用什么XML序列化方法?_C#_.net_Datacontractserializer_Xmlserializer_Ixmlserializable - Fatal编程技术网

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,但这只是一种序列化格式。