【问题标题】:What XML serialization method should I use for a public API?我应该为公共 API 使用哪种 XML 序列化方法?
【发布时间】:2010-11-19 19:33:32
【问题描述】:

我正在编写一个程序,它构建了一个由继承自抽象 Node 类的类组成的树结构。我的程序中内置了许多不同类型的节点。但是,我也希望让更高级的用户能够引用我的库并编写他们自己的 Node 派生词。这些插件库会在我的应用程序通过Assembly.Load() 启动时加载。因此,我的应用程序使用的所有潜在 Node 类型在运行时才会知道。

此外,我希望能够序列化和反序列化这些树与 XML 文件之间的关系。我对 XMLSerializer、DataContractSerializer 和实现 IXmlSerializable 有一些经验。通常,我使用 DataContractSerializer,因为它通常需要比实现 IXmlSerializable 更少的代码,并且可以序列化 XmlSerializer 不能序列化的私有字段。

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

考虑到这一点,我应该使用一种序列化机制而不是另一种吗?

【问题讨论】:

    标签: c# .net datacontractserializer xmlserializer ixmlserializable


    【解决方案1】:

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

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

    【讨论】:

    • 是的,我看不出任何其他程序需要序列化/反序列化这些文件的原因,而且我也喜欢允许其他序列化格式(例如二进制)的想法未来。
    • 明确地说,我指的“二进制”是 XmlDictionaryWriter 类可以发出的二进制序列化 XML。我们都习惯于文本序列化 XML,但这只是一种序列化格式。
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 2010-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多