-->

什么是XmlSerializer的和BinaryFormatter的之间的差异(What are t

2019-06-17 11:54发布

上周我花了很多时间相当一部分的系列化工作。 那段时间,我发现利用无论是BinaryFormatter的或XmlSerializer的例子很多。 不幸的是,我没有找到任何人的例子,全面详细介绍了两者之间的差异。

我好奇的起源在于为什么BinaryFormatter的是能够直接反序列化的接口,而XmlSerializer的是没有的。 乔恩斯基特在回答“ 铸造多个(未知类型)在运行时 ”提供的接口直接二进制序列化的一个例子。 斯坦R.为我提供了实现在回答使用XmlSerializer我的目标的手段“ XML对象反序列化的接口 。”

除了明显的BinaryFormatter的使用二进制序列化,而XmlSerializer的使用XML我想更全面地了解根本区别。 时使用的一个或另一个以及各自的优点和缺点。

Answer 1:

原因的二进制格式化能够直接反序列化到一个接口类型是因为,当其目的在于最初序列化到包含类型和组件信息的二进制流元数据与对象数据卡住英寸 这意味着,当二进制格式反序列化知道它的对象类型,建立正确的对象,然后你可以强制转换到该对象实现的接口类型。

在otherhand XML序列化只是序列化为一个模式,只序列化公共领域和对象的值和没有类型信息的其他然后,(如接口式工具)。

这里是一个不错的职位, .net序列 ,比较的BinaryFormatter , SoapFormatter和XmlSerializer的 。 我建议你看看下面的表,除了前面提到的串行包括在DataContractSerializer的 , NetDataContractSerializer和protobuf网 。



Answer 2:

只是权衡...

两者之间的明显区别是“二进制XML VS”,但它确实去比更深了很多:

  • 字段( BinaryFormatter = BF)与公共成员(典型性质)( XmlSerializer = XS)
  • 型基于元数据的(BF)与基于合同的(XS)
  • 版本脆(BF)VS版本容错(XS)
  • “图表”(BF)与 “树”(XS)
  • .NET特定(BF)与便携式(XS)
  • 不透明(BF)与人类可读的(XS)

至于为什么讨论BinaryFormatter可能易碎, 在这里看到 。

这是不可能讨论其较大; 在所有类型的元数据BinaryFormatter可以把它做大。 而且XmlSerializer可以像gzip压缩非常努力。

但是,它可能采取各的长处; 例如,谷歌有开源自己的数据序列化格式,“协议缓冲区”。 这是:

  • 合同为基础
  • 便携式(见实施的名单 )
  • 版本容错
  • 基于树
  • 不透明的(尽管当与.proto结合的工具来显示数据)
  • 典型的“ 合同第一 ”,但有些实现允许基于反射隐性契约

但重要的是,它是非常密集的数据(无类型的元数据,纯二进制表示,短标记,技巧,例如变体长度基-7编码),并且非常有效的方法(没有复杂的XML结构,无字符串匹配部件等)。

我可能有点偏颇; 我维护的实现方式之一(包括一些适用于C#/。NET),但你会注意到我还没有与任何特定的实现; 格式看台下自己的优点;-p



Answer 3:

XML序列产生XML并且还一个XML Schema(隐式地)。 它会产生XML符合这一模式。

一个含义是,它不会序列化不能在XML模式来描述任何东西。 例如,没有办法的列表和在XML模式的阵列之间进行区分,所以由串行器产生的XML模式可以被解释任何一种方式。

运行序列化(其中BinaryFormatter是一部分)序列化的实际.NET类型到另一边,因此,如果您发送List<int> ,对方会得到一个List<int>

如果对方正在运行的.NET这显然效果更好。



Answer 4:

XmlSerializer的通过读取同时拥有一个公共的getter和setter方法公开(以及任何公共领域)中的所有类型的串行化性质的类型。 在这个意义上XmlSerializer的序列化/反序列化实例的“大众视野”。

二进制格式,相比之下,通过串行化实例的“内部”,即它的序列化的字段类型。 未标记为[非序列化]的任何字段将被序列到二进制流。 类型本身必须被标记为[序列化]作为必须被序列化的任何内部字段也是。



Answer 5:

我想最重要的问题之一是,二进制序列化可以序列化的公共和私有成员,而另一个与公立才起作用。

在这里,它提供了在尺寸方面这两者之间一个非常有用的比较。 这是一个非常重要的问题,因为你可能把你的序列化对象到远程计算机。

http://www.nablasoft.com/alkampfer/index.php/2008/10/31/binary-versus-xml-serialization-size/



文章来源: What are the differences between the XmlSerializer and BinaryFormatter