2

プログラムでシリアル化を処理する最良の方法を見つけようとしています。

プライベート フィールドをシリアライズしたい (そのため、XML シリアライザーはオプションではありません) Bindinglist のようなジェネリック型をシリアライズしたい (SoapSerializer はオプションではありません) また、以前のバージョンのプログラムからオブジェクトをデシリアライズできるように、ある程度のサポートを提供したいと考えています。

したがって、残っていると思うのは BinarySerializer と、前方互換性に対処するための ISerializable インターフェイスの実装だけです。

これは正しいです?

注: このプロジェクトを見つけたと言わざるを得ません。ただし、プロジェクトは死んでいるように見え、動作させることができませんでした (ファイル欠落エラー) http://sourceforge.net/project/showfiles.php?group_id=196509

4

2 に答える 2

1

ではBinaryFormatterを使用できます[OptionalField]が、これはまだ非常に脆弱です。

protobuf-netはどうですか?それをすべて行い、BinaryFormatter に関連するバージョン管理の問題はありません。Google の「プロトコル バッファ」形式に基づいているため、バージョン トレラントで拡張可能になるように設計されています (開示: 私は作成者なので、偏見がある可能性があります)。

または、DataContractSerializerフィールドのシリアル化をサポートします。プロパティの代わりにフィールドに対して設定するだけです[DataMember](.NET 3.0 が必要です)。

于 2009-04-16T11:35:58.217 に答える
0

はい、ISerializable を実装する必要があります。

要点は次のとおりです。

  • GetObjectData(SerializationInfo 情報、StreamingContext コンテキスト) を実装します。ここで、情報オブジェクトにキー ペアを追加する必要があります。
  • シリアル化コンストラクタ MyClass(SerializationInfo info, StreamingContext context) を実装します。ここでは、情報オブジェクトから値を取得する必要があります。
于 2009-04-16T12:18:07.803 に答える