私は混乱しています - XML シリアライゼーションをいつ使用し、いつ .NET フレームワークでバイナリ シリアライゼーションを使用する必要がありますか?
3 に答える
既存の回答はどちらも「クロスプラットフォーム」に焦点を当てていますが、それは無関係の問題です。彼らが指摘しているのは、「BinaryFormatter
クロスプラットフォームを行っている場合は使用しないでください」ということです。私はこれを完全に支持します。ただし、非常にクロスプラットフォームな一連のバイナリ シリアル化形式があります。protobuf / ASN.1 が代表的な例です。
それでは、代わりにそれぞれが提供するものを見てみましょう。
- バイナリは通常、サイズが小さく、(両端で) 処理が速く、人間が簡単に読み取ったり編集したりできません。
- テキスト形式 (xml / json) は、バイナリ形式よりも冗長になる傾向があります (ただし、多くの場合、適切に圧縮されます)。ただし、手動で操作するのは非常に簡単です。しかし、マッピングを処理するすべてのテキストは、それらを遅くする傾向があります
- xml は Web サービスで非常に一般的であり、xsd、xslt、堅牢な xml エディターなどのグーリング サポートの恩恵を受けます。
- json はブラウザベースのコミュニケーションの主要な役割を果たします (Web サービスでも使用されます)。
適切なバイナリ形式を選択している限り、相互運用性が長所でも短所でもないことに注意してください。
参照用に、ほとんどの .NET シリアライザーのシリアライゼーション時間、デシリアライゼーション、およびスペース メトリックを比較した回答を次に示します。
.NET に固有です。同じ型システムを使用している 2 つのアプリケーションがある場合は、バイナリ シリアル化を使用できます。一方、異なるプラットフォームのアプリケーションがある場合は、XML シリアライゼーションを使用することをお勧めします。したがって、チャット アプリケーション (クライアントとサーバー) を作成している場合は、バイナリ シリアル化を使用する可能性がありますが、後で Python を使用してクライアントを作成する必要があると判断した場合は、使用しない場合があります。
ユーザーフレンドリーまたはクロスプラットフォームの出力が必要な場合は、XML を使用してください。また、XML シリアライゼーションはパブリック フィールドとプロパティを使用してシリアライズし、必要に応じてクラス レベルで属性とカスタム シリアライゼーションを使用して出力を変更/再フォーマットできます。Bin.Ser. プライベート フィールドを使用してシリアル化します。