我应该何时在.NET框架中使用XML序列化与二进制序列化?

时间:2011-01-20 04:31:08

标签: c# .net serialization xml-serialization binary-serialization

我很困惑 - 我应该何时使用XML序列化,何时应该在.NET框架中使用二进制序列化?

3 个答案:

答案 0 :(得分:34)

现有的两个答案都集中在“跨平台”上,但这是一个无关的问题。他们在那里提出的观点是“如果你在做跨平台的话,不要使用BinaryFormatter” - 我完全支持。但是,有一系列二进制序列化格式非常跨平台 - protobuf / ASN.1是主要的例子。

所以,让我们看一下每个人提供的东西;

  • 二进制文件通常较小,通常处理速度较快(两端),不易人类可读/可编辑
  • 文本格式(xml / json)往往比二进制更冗长(虽然经常压缩得很好),但很容易手工处理;但所有处理映射的文本往往会使它们变慢
    • xml是非常常见的网络服务,并受益于gooling支持,如xsd,xslt和强大的xml编辑器
    • json是基于浏览器的通信的主要参与者(虽然它也用于网络服务) - 往往不那么正式但仍然非常有效

请注意,只要您选择合适的二进制格式,互操作性既不是强弱也不是弱点!

Here's an answer,用于比较大多数.NET序列化程序的序列化时间,反序列化和空间度量,供您参考。

答案 1 :(得分:13)

特定于.NET,如果您有两个使用相同类型系统的应用程序,则可以使用二进制序列化。另一方面,如果您有不同平台的应用程序,则建议使用XML序列化。因此,如果我正在编写聊天应用程序(客户端和服务器),我可能会使用二进制序列化,但如果我后来决定使用Python编写客户端,那么我可能不会。

答案 2 :(得分:2)

如果您想要用户友好或跨平台输出,请使用XML。 此外,XML序列化使用公共字段和属性进行序列化,您可以在类级别使用属性和自定义序列化来更改/重新格式化输出。 Bin.Ser。使用私有字段来序列化。