回答

13

具體到.NET,如果您有正在使用的同類型系統中的兩個應用程序,那麼你可以使用二進制序列化。另一方面,如果您的應用程序位於不同平臺上,則建議使用XML序列化。所以如果我正在編寫一個聊天應用程序(客戶端和服務器),我可能會使用二進制序列化,但如果我以後決定使用Python來編寫客戶端,那麼我可能不會。

+0

如果您在說「xml序列化」時包含Data Contract Serializer,那麼我同意你的意見。 – 2011-01-20 04:48:50

+0

非常感謝回答 – Mahantesh 2011-01-20 05:29:12

2

如果您想要用戶友好型或跨平臺輸出,請使用XML。 此外,XML序列化使用公共字段和屬性進行序列化,並且如果您想使用屬性和類級別的自定義序列化,則可以更改/重新格式化輸出。 Bin.Ser。使用專用字段進行序列化。

34

這兩個現有答案都關注「跨平臺」,但這是一個無關緊要的問題。他們在那裏做的是「如果你正在做跨平臺,不要使用BinaryFormatter」 - 我完全支持這一點。然而,有一系列的二進制序列化格式,其中很多都是跨平臺 - protobuf/ASN.1是最好的例子。

所以,讓我們來看看每個人都能提供什麼;

  • 二進制通常是較小的,典型地更快地處理(在兩端),並且不容易人類可讀/可編輯的
  • 文本格式(XML/JSON)往往比二進制更詳細的(儘管通常壓縮以及),但很容易手工操作;但所有的文字處理的映射往往使他們慢
    • XML是很常見的網絡服務,並從中受益gooling支持,如XSD,XSLT和強大的XML編輯器
    • JSON是在瀏覽器中的主要球員基於通訊科(雖然它是在網絡服務中使用) - 往往是不太正規,但還是很有效的

注意的互操作性如何既不是力量也不是任何弱點,只要你選擇適當的二進制格式!

Here's an answer比較大多數.NET序列化程序的序列化時間,反序列化和空間度量,供您參考。

相關問題