替换XML序列化

时间:2009-07-27 06:39:01

标签: c# xml xml-serialization

我使用XmlSerializer代码来序列化/反序列化数据结构以保持持久性。我已经在StackOverflow上的几个地方阅读和听到XmlSerializer是以下一个或多个:

  • 支持/实施不力
  • 未来可能不会受到支持

我的问题是双重的;以上是否属实,若有,有哪些替代方案?就我的目的而言,XML工作得非常好,我希望保持这一点不变,但其他一切都可以改变。

编辑:如果你想向XML推荐其他内容,我会对此持开放态度,但它确实需要人类可读。

6 个答案:

答案 0 :(得分:14)

XmlSerializer完全可以支持,但有一些小故障;

  • 相对慢;但通常这仍然足够快
  • 仅支持公众成员;可能是一种痛苦
  • 需要写访问者列表 - 只是丑陋

然而,我预计它会继续存在相当长的时间; IMO,BinaryFormatter真正的问题(当用于持久性时)。

我非常偏颇(因为我是作者),但我会选择protobuf-net;使用谷歌“协议缓冲”线格式的二进制序列化器;快速,可在语言/平台之间移植,输出非常小,版本容忍等(当然也是免费的)。显然不是xml,所以不是人类可读的。

答案 1 :(得分:4)

就XML Serializer而言,“支持”,并且“支持”。

关于XML Serializer的越来越多的连接错误报告正在回来确认错误,并声明错误将无法修复。

我确信如果您遇到XML Serializer中的安全关键错误,它将被修复。但是,我认为不太可能修复其他不那么重要的错误。

答案 2 :(得分:1)

如果您可以使用.Net 3.5(最好是SP1),我会查看DataContractSerializer。虽然它比XmlSerializer更不易配置,但它更快,更容易使用(至少在我的经验中)和更便携(即用于Web服务)。 SP1将其默认行为更改为选择退出,因此您可以序列化任何类,而无需在序列化所需的所有内容上明确定义属性。

我建议在投资之前彻底阅读相关文档作为更改。根据您的序列化的自定义方式,它可能不适合您。

答案 3 :(得分:1)

jSON比XML快得多。您可以使用Json.NET来读取它。它有内置的序列化。

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

答案 4 :(得分:1)

我将采取另一种观点:
支持XmlSerializer,其行为已知,并且运行良好。这不是“坏事”。它非常通用,文档齐全,有很多例子。性能可能非常适合您的需求。它可能会满足您的需求。

有些人有特殊需求,XmlSerializer无法解决这些问题。根据这些要求,我们可以获得protobufs,DataContractSerializer和其他选项。

但XmlSerializer仍然非常通用,可能是城里最广泛应用的序列化器。它仍然是序列化内容最安全的选择。


至于支持......
MS可能会因修复错误而放慢速度。我将它与WinForms进行比较。 WinForms不再是微软推出的主要UI框架。但它仍然成熟,运作良好,表现良好。 XmlSerializer是一样的。

至于对未来的支持。 MS有5 + 5支持政策 - 它们在发布后支持产品5年,然后您可以购买5年的额外支持。 .NET Framework不是受支持的“东西” - 它是支持.NET的Windows操作系统。 Windows 7将包括.NET 3.5(我认为版本是3.5?)所以.NET 3.5中的所有内容,包括WinForms和XmlSerializer,将在10月或Win7发布时“正式支持”5年。如果它是.NET 4.0,那么4.0中的任何东西(包括,仍然是WinForms和XmlSerializer)将被支持5年。每次新产品附带.NET时,5年时钟都会重新启动。

看看VB6 Runtime,它最初是在1998年随Visual Studio 6一起发布的。从那时起它就被包含在Windows中,包括今年发布的Windows Server 2008 R2。所以VB运行时至少要到2014年才会得到支持。至少这是16年的主流支持。

官方支持而言,您无需担心。这不是您正在谈论的开源项目。这不是像WSE或SOAP Toolkit那样的权宜之计。

确实存在一定程度的支持,并且随着较新的.NET API的推出和推广,较旧的.NET API优先减少。但是,当它们处于高原时,较旧的那些可能更稳定。你完全安全。

答案 5 :(得分:0)

这是一个替换XmlSerializer的库:

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