15

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

4

3 回答 3

37

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

所以,让我们看看每个人都提供什么;

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

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

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

于 2011-01-20T05:49:44.727 回答
14

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

于 2011-01-20T04:47:27.587 回答
2

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

于 2011-01-20T05:10:24.183 回答