C# XML序列化的替代
我使用C# XML序列化的替代,c#,xml,xml-serialization,C#,Xml,Xml Serialization,我使用XmlSerializer对数据结构进行序列化/反序列化以实现持久性。我在StackOverflow上的几个地方读到并听说,XmlSerializer是一个或多个: 坏的 支持/实施不力 将来可能不会得到支持 我的问题有两个方面;上述情况是否属实,如果属实,还有哪些替代方案?就我而言,XML工作得非常好,我希望保持这一点不变,但其他一切都可以更改 编辑:如果您想对XML提出其他建议,我愿意接受,但它确实需要可读性。如果您可以使用.Net 3.5(最好是SP1),我会研究。尽管它的可配置
XmlSerializer
对数据结构进行序列化/反序列化以实现持久性。我在StackOverflow上的几个地方读到并听说,XmlSerializer
是一个或多个:
- 坏的
- 支持/实施不力
- 将来可能不会得到支持
我建议在作为一种改变进行投资之前,彻底阅读关于它的文档。根据序列化的自定义程度,它可能不适合您。
XmlSerializer
完全可以支持,但有一些小故障
- 相对缓慢;但通常这仍然足够快
- 只支持公众成员;可能是一种痛苦
- 需要写入访问器列表-非常难看
BinaryFormatter
(用于持久化时)
我很有偏见(因为我是作者),但我会选择;使用谷歌“协议缓冲区”有线格式的二进制序列化程序;语言/平台之间的快速、可移植、输出非常小、版本容忍等(当然是免费的)。不过,显然不是xml,因此不便于人类阅读。jSON比xml快得多。您可以使用Json.NET来读取它。它具有内置的序列化功能
对于XML序列化程序,有“支持的”,也有“支持的” 越来越多的关于XML序列化程序的Connect bug报告回来确认bug,并声明这些bug不会被修复
我确信,如果您在XML序列化程序中遇到了一个安全性关键的bug,它将得到修复。但是,我认为不太可能修复其他不那么关键的bug。我将采用另一种观点:
XmlSerializer是受支持的,其行为是已知的,并且工作良好。这并不“坏”。它非常通用,有很好的文档记录,有很多例子。性能可能非常适合您的需要。它可能满足你的需要 有些人有特殊的需求,但XmlSerializer没有解决这些需求。从这些需求中,我们可以得到protobufs、DataContractSerializer和其他选项 但是XmlSerializer仍然非常通用,并且可能是城里应用最广泛的序列化程序。这可能仍然是序列化内容最安全的方法
至于支持…
微软可能正在放慢修复bug的速度。我将其与WinForms进行比较。WinForms不再是Microsoft推出的主要UI框架。但它仍然成熟,运作良好,表现良好。XmlSerializer是相同的 至于对未来的支持。微软有一个5+5支持政策-他们在产品发布后支持5年,然后你可以为它购买5年的额外支持。NET框架不是受支持的“东西”-受支持的是包含.NET的Windows操作系统。Windows 7将包括.NET 3.5(我认为版本是3.5?),因此.NET 3.5中的所有内容,包括WinForms和XmlSerializer,将在10月或Win7发布时再“正式支持”5年。如果是.NET4.0,那么4.0中的任何内容(仍然包括WinForms和XmlSerializer)都将支持5年。每当.NET附带新产品时,5年时钟就会重新启动 查看VB6运行时,它最初于1998年随Visual Studio 6一起提供。从那时起,它就包含在Windows中,包括今年发布的Windows Server 2008 R2。因此,VB运行时将至少支持到2014年。这至少是16年的主流支持 就官方支持而言,你没有什么可担心的。这不是你所说的开源项目。这不是像WSE或SOAP工具包那样的权宜之计
诚然,支持的程度是不同的,随着新的.NET API的发布和推广,旧的.NET API的优先级会降低。但是,到它们稳定下来的时候,年长的物种可能会更稳定。你完全安全 以下是一个替代XmlSerializer的库:
除了将一些类纯粹作为包装器类型的类,我所做的
XmlSerializer
没有什么特别之处。没有覆盖或类似的东西。Marc,是否(轻松地)可以用protobuf net替换默认的BinaryFormatter以与.net远程处理一起使用?我不需要XML(虽然,这样做很好,不会破坏现有安装),但我需要人可读的。不过,感谢您列出的缺点。对于远程处理,您可以通过protobuf net在每个对象大约4行代码中实现ISerializable
;大概是我能得到的最好的。。。这仅对“根”对象(不是封装的对象)是必需的。为了让人可读。。。也许JSON.Net?JSON是一个有趣的建议,我甚至没有想到。。。我会调查的,干杯。注意这只是一个“考虑”。如果您的xml目前可以工作,那么就没有理由更改任何内容。@Cheeso:您知道bug的速度吗