代码之家  ›  专栏  ›  技术社区  ›  Matthew Scharley

替换XML序列化

  •  23
  • Matthew Scharley  · 技术社区  · 17 年前

    我有代码使用 XmlSerializer 为持久化而序列化/反序列化数据结构。我在StackOverflow上的几个地方读过 XML序列化程序 是以下一个或多个:

    • 坏的
    • 支持/实施不足
    • 将来可能不会得到支持

    我的问题有两个方面:上面的任何一个是真的吗?如果是的话,还有什么选择呢?出于我的目的,XML工作得很好,我希望保持这一点不变,但其他一切都可以更改。

    编辑: 如果您想对XML提出其他建议,我可以接受,但它确实需要具有人类可读性。

    6 回复  |  直到 11 年前
        1
  •  13
  •   Marc Gravell    17 年前

    XmlSerializer 是完全可以支持的,但有一些小问题;

    • 相当地 很慢,但通常还是足够快
    • 只支持公共成员;可能是痛苦
    • 需要写访问器列表-只是难看

    但是,我希望它会在相当长的一段时间内继续存在;在我看来,它是 BinaryFormatter 那有 真实的 问题(用于持久性时)。

    我很有偏见(因为我是作者),但我会选择 protobuf-net ;使用Google的“协议缓冲区”有线格式的二进制序列化程序;速度快,可在语言/平台之间移植,输出量小,允许版本等(当然是免费的)。但显然不是XML,所以人类不可读。

        2
  •  4
  •   John Saunders    17 年前

    至于XML序列化程序,有“支持”和“支持”。

    越来越多的XML序列化程序上的Connect Bug报告回来确认错误,并声明错误不会被修复。

    我敢肯定,如果在XML序列化程序中遇到了一个安全关键的bug,它将被修复。但是,我认为其他不那么重要的bug不太可能被修复。

        3
  •  1
  •   womp    17 年前

    如果您可以使用.NET 3.5(最好是SP1),我将研究 DataContractSerializer . 尽管它比XMLSerializer的配置要少,但它更快、更容易使用(至少在我的经验中是这样),而且更可移植(例如,对于Web服务)。sp1将它的默认行为更改为opt-out,因此您可以序列化任何类,而无需在需要序列化的所有内容上明确定义属性。

    不过,我建议您在将其作为一种变化进行投资之前,仔细阅读有关它的文档。根据序列化的自定义程度,它可能不适用于您。

        4
  •  1
  •   user145586    17 年前

    JSON比XML快得多。您可以使用json.net来读取它。它有内置的序列化。

    http://james.newtonking.com/pages/json-net.aspx

        5
  •  1
  •   Cheeso    17 年前

    我想换一种观点:
    支持XmlSerializer,它的行为是已知的,并且工作正常。它不是“坏”的。它非常一般,有很好的文档记录,有很多例子。性能可能非常适合您的需要。它可能会满足你的需要。

    有些人有一些特殊的需求,但XML序列化程序没有解决这些需求。从这些需求中,我们得到了Protobufs、DataContractSerializer和其他选项。

    但是,XMLSerializer仍然非常通用,可能是镇上应用最广泛的序列化程序。它仍然可能是序列化内容最安全的赌注。


    为了支持…
    微软可能正在放缓修复漏洞的速度。我将其与Winforms进行比较。WinForms不再是微软推出的主要用户界面框架。但它仍然是成熟的,运作良好,表现良好。XmlSerializer相同。

    对于未来的支持。微软有一个5+5的支持政策——他们在产品发布后支持5年,然后你可以为它购买5年的额外支持。.NET框架不是受支持的“东西”—它是包含受支持的.NET的Windows操作系统。Windows7将包括.NET 3.5(我认为版本是3.5?)因此.NET 3.5中的所有内容,包括winforms和xmlserializer,都将“正式支持”5年,从10月开始,或每当win7发布时。如果它是.NET 4.0,那么4.0中的任何内容(包括winforms和xmlserializer)都将被支持5年。每当新产品与.NET一起装运时,5年时钟都会重新启动。

    在查看vb6运行时时时时,它最初是在1998年随Visual Studio 6一起提供的。从那时起,它就被包括在Windows中,包括今年发布的Windows Server 2008 R2。因此,至少到2014年,将支持VB运行时。这至少是16年的主流支持。

    你没什么好担心的 官方支持 . 这不是你所说的开源项目。这不是像WSE或SOAP工具包那样的权宜之计。

    确实有一定程度的支持,随着新的.NET API的发布和推广,旧的.NET API会优先减少。但是,当它们稳定下来的时候,老的更稳定。你完全安全。

        6
  •  0
  •   MatthewMartin muthu    11 年前

    以下是替换XmlSerializer的库:

    http://www.sharpserializer.com/en/index.html