下位互換性を備えたジェネリックスを含むクラスのシリアル化
-
09-09-2019 - |
質問
プログラムでシリアル化を処理する最適な方法を見つけようとしています。
プライベートフィールドをシリアル化したい(XMLシリアイザーはオプションではありません)バインディングリストなどの一般的なタイプをシリアル化したい(Soapserializerはオプションではありません)。また、プログラムの以前のバージョンからオブジェクトを脱復することができるためのある程度のサポートを提供したいと思います。
したがって、私に残っているのは、BinarySerializer と、前方互換性に対処するための ISerializable インターフェイスの実装だけだと思います。
これは正しいです?
注記:このプロジェクトを見つけたと言わざるを得ません。しかし、プロジェクトは死んでいるように見え、それを機能させることができませんでした(ファイル欠落エラー)http://sourceforge.net/project/showfiles.php?group_id=196509
解決
BinaryFormatter
を使用すると、 [OptionalField]
<を使用することができます/ A>が、これはまだ非常に脆いのです。
どのようにいるProtobufネットのでしょうか?すべてのことをして、にBinaryFormatterに関連付けられているバージョン管理の問題を持っていません。それはGoogleの「プロトコルバッファ」形式に基づいているため、をバージョン寛容かつ拡張(情報開示:私は、著者ので、私はバイアスされてもよい)であることをは設計されています。
また、DataContractSerializer
は、フィールドのシリアル化をサポートしています。あなたのフィールドの代わりに、プロパティに対してだけ設定[DataMember]
は(.NET 3.0が必要です)。
他のヒント
はい、ISerializable を実装する必要があります。
重要なポイントは次のとおりです
- GetObjectData(SerializationInfo 情報、StreamingContext コンテキスト) を実装します。ここでは、情報オブジェクトにキーペアを追加する必要があります。
- シリアル化コンストラクター MyClass(SerializationInfo info, StreamingContext context) を実装します。ここでは、情報オブジェクトから値を取得する必要があります。