2010-09-09 69 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