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

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

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

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

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

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

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

这是一个比较大多数.NET序列化程序的序列化时间,反序列化和空间度量的答案 ,供您参考。

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