“Formatter”和“Serializer”之间有什么区别吗?

10

在.NET中,一些东西被称为“格式化程序” - BinaryFormatterSoapFormatter

而另一些被称为“序列化程序” - XmlSerializerDataContractSerializer

为什么有这种区别呢?

3个回答

7

这个区别有些微妙,但也很重要。.NET框架中有17个具体的类用于格式化XML。这些格式化器都是隐藏的,你需要使用像XmlWriter.Create()这样的方法来获得它们的实例。对于DataContractSerializer同样也是如此,实际的格式化由例如XmlDictionaryWriter的实例完成。

而BinaryFormatter或SoapFormatter则没有这种间接性,它们自己负责格式化。换句话说,一个Formatter格式化数据,而一个Serializer则使用格式化器。


1
有趣。我在哪里可以阅读关于格式化XML的17个类的内容? - Stefan Monov
1
它们没有文档记录。但是你可以使用Reflector看到它们。 - Hans Passant

4
不,它们是同义词。它们的作用相同:将CLR对象转换为可传输的字节序列。

Andrey:不错——简短而甜美……:) +1 - t0mm13b

1

格式化程序的差异是至关重要的——如其名,BinaryFormatter使用本机二进制方式存储数据,而SoapFormatter则使用XML文本方式存储,同时不同的序列化方式实际上取决于格式化程序类型。使用BinaryFormatter进行二进制数据序列化通常比使用soap格式化程序更快且更紧凑。

因此,如果您想要进行"内存转储"操作,最好使用BinaryFormatter进行序列化/反序列化,尽管这样会在不同体系架构之间产生数据互操作性问题——也就是说,在不同平台之间交换数据时可能不兼容,但处理速度更快……

而对于SoapFormatter来说,它能够从这种二进制不兼容性中得到保护,因为它基于Unicode或ASCII文本方式,但处理速度会慢很多!


1
@Kendrick - 好的...谢谢...当OP问'为什么有区别?'时,我认为这就是OP要找的东西,而不是Andrey所说的'不,它们是同义词',这有点与'They do the same'相矛盾,实际上同义词的定义是'同义词是具有相同或非常相似含义的不同单词',并不一定相同! :) - t0mm13b
不,Kendrick是正确的 - 我知道功能上的区别。我问的是命名上的不一致性。谢谢。 - Stefan Monov
@Stefan:好的,那就这样吧!很高兴写下这个答案! :) - t0mm13b
1
我仍然认为它们本质上是相同的。你只是给出了特定类之间的区别。 - Andrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接