2010-09-09 43 views

回答

7

有点脆弱,但有一个微妙的区别。 .NET框架中有17个具体类用于格式化XML。这些格式化程序全部隐藏起来,您可以使用像XmlWriter.Create()这样的方法获得实例。 DataContractSerializer也是如此,实际的格式是由XmlDictionaryWriter实例完成的。

对BinaryFormatter或SoapFormatter没有这样的间接寻址,他们自己处理格式。换句话说,格式化程序格式,序列化程序使用格式化程序。

+1

有趣。我在哪里可以阅读关于格式化XML的17个类? – 2010-09-09 15:33:15

+1

他们没有记录。但你可以用Reflector看到它们。 – 2010-09-09 15:45:43

4

不,它们是同义词。他们也这样做:将CLR对象转换为可传输的字节序列。

+0

安德烈:很好 - 简短而又甜美... :) +1 – t0mm13b 2010-09-09 15:07:13

1

格式化的差异是关键 - 的BinaryFormatter因为它表明,该数据在本机二进制的方式,而SoapFormatter是XML文本的方式,扔在不同方式的序列化实际上是依赖于格式化程序的类型,使用BinaryFormatter的二进制数据往往比肥皂格式化程序小得多并且速度更快。

正是出于这个原因,如果你想采取一个“内存转储”这是更好地使用的BinaryFormatter和序列化/反序列化了,在数据互操作不同架构之间的成本 - 这意味着它可能不兼容如果更换不同的平台,但更快的处理速度之间的数据...

而与SoapFormatter它是从这样的二进制不兼容的保护,因为它基于Unicode或ASCII是文本,但相对很慢!

+3

好的答案,但不是真正的问题的答案... – Kendrick 2010-09-09 14:58:09

+1

@肯德里克 - 好的......谢谢......当OP问'为什么区别?'我认为这将是OP所寻找的,而不是Andrey所说的'不,它们是同义词',当真正的同义词的定义是'同义词是具有相同或非常相似的不同单词时,这种矛盾与'他们做同样的事情'意义不一定相同! :) – t0mm13b 2010-09-09 15:02:23

+0

不,肯德里克是正确的 - 我知道功能上的差异。我所问的是命名上的不一致。不过谢谢。 – 2010-09-09 15:03:43