在.NET中,一些东西被称为“格式化程序” - BinaryFormatter
、SoapFormatter
。
而另一些被称为“序列化程序” - XmlSerializer
、DataContractSerializer
。
为什么有这种区别呢?
在.NET中,一些东西被称为“格式化程序” - BinaryFormatter
、SoapFormatter
。
而另一些被称为“序列化程序” - XmlSerializer
、DataContractSerializer
。
为什么有这种区别呢?
这个区别有些微妙,但也很重要。.NET框架中有17个具体的类用于格式化XML。这些格式化器都是隐藏的,你需要使用像XmlWriter.Create()这样的方法来获得它们的实例。对于DataContractSerializer同样也是如此,实际的格式化由例如XmlDictionaryWriter的实例完成。
而BinaryFormatter或SoapFormatter则没有这种间接性,它们自己负责格式化。换句话说,一个Formatter格式化数据,而一个Serializer则使用格式化器。
格式化程序的差异是至关重要的——如其名,BinaryFormatter使用本机二进制方式存储数据,而SoapFormatter则使用XML文本方式存储,同时不同的序列化方式实际上取决于格式化程序类型。使用BinaryFormatter进行二进制数据序列化通常比使用soap格式化程序更快且更紧凑。
因此,如果您想要进行"内存转储"操作,最好使用BinaryFormatter进行序列化/反序列化,尽管这样会在不同体系架构之间产生数据互操作性问题——也就是说,在不同平台之间交换数据时可能不兼容,但处理速度更快……
而对于SoapFormatter来说,它能够从这种二进制不兼容性中得到保护,因为它基于Unicode或ASCII文本方式,但处理速度会慢很多!