15

私は混乱しています - XML シリアライゼーションをいつ使用し、いつ .NET フレームワークでバイナリ シリアライゼーションを使用する必要がありますか?

4

3 に答える 3

37

既存の回答はどちらも「クロスプラットフォーム」に焦点を当てていますが、それは無関係の問題です。彼らが指摘しているのは、「BinaryFormatterクロスプラットフォームを行っている場合は使用しないでください」ということです。私はこれを完全に支持します。ただし、非常にクロスプラットフォームな一連のバイナリ シリアル化形式があります。protobuf / ASN.1 が代表的な例です。

それでは、代わりにそれぞれが提供するものを見てみましょう。

  • バイナリは通常、サイズが小さく、(両端で) 処理が速く、人間が簡単に読み取ったり編集したりできません。
  • テキスト形式 (xml / json) は、バイナリ形式よりも冗長になる傾向があります (ただし、多くの場合、適切に圧縮されます)。ただし、手動で操作するのは非常に簡単です。しかし、マッピングを処理するすべてのテキストは、それらを遅くする傾向があります
    • xml は Web サービスで非常に一般的であり、xsd、xslt、堅牢な xml エディターなどのグーリング サポートの恩恵を受けます。
    • json はブラウザベースのコミュニケーションの主要な役割を果たします (Web サービスでも使用されます)。

適切なバイナリ形式を選択している限り、相互運用性が長所でも短所でもないことに注意してください。

参照用に、ほとんどの .NET シリアライザーのシリアライゼーション時間、デシリアライゼーション、およびスペース メトリックを比較した回答を次に示します。

于 2011-01-20T05:49:44.727 に答える
14

.NET に固有です。同じ型システムを使用している 2 つのアプリケーションがある場合は、バイナリ シリアル化を使用できます。一方、異なるプラットフォームのアプリケーションがある場合は、XML シリアライゼーションを使用することをお勧めします。したがって、チャット アプリケーション (クライアントとサーバー) を作成している場合は、バイナリ シリアル化を使用する可能性がありますが、後で Python を使用してクライアントを作成する必要があると判断した場合は、使用しない場合があります。

于 2011-01-20T04:47:27.587 に答える
2

ユーザーフレンドリーまたはクロスプラットフォームの出力が必要な場合は、XML を使用してください。また、XML シリアライゼーションはパブリック フィールドとプロパティを使用してシリアライズし、必要に応じてクラス レベルで属性とカスタム シリアライゼーションを使用して出力を変更/再フォーマットできます。Bin.Ser. プライベート フィールドを使用してシリアル化します。

于 2011-01-20T05:10:24.183 に答える