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

Mah*_*esh 15 .net c# serialization xml-serialization binary-serialization

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

Mar*_*ell 35

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

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

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

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

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


Ade*_*eel 13

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

  • @Mahantesh @Adeel - "二进制"不是问题所在; 二进制不可互操作是不正确的 - 简单地说:`BinaryFormatter`(二进制序列化器的*特定示例*)是一个糟糕的选择.还有其他几个. (6认同)