2009-04-16 22 views
2

私のプログラムでシリアル化を処理する最良の方法を見つけようとしています。下位互換性を持つジェネリックを含むクラスのシリアライズ

私はまたからオブジェクトを逆シリアル化することができるというのサポートのいくつかのレベルを提供したい私がするBindingList(SoapSerializerは何もオプションではありません) のようなジェネリック型をシリアル化したい (そのXMLシリアライザは、noオプションではありません)プライベートフィールドをシリアル化したいです私のプログラムの以前のバージョン。

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

これは間違いありませんか?

注: 私はこのプロジェクトが見つかりました。 BinaryFormatterのプロジェクトが死んだように見えたし、私はそれが(ファイル見つからないエラー)作業することができませんでしたしかし http://sourceforge.net/project/showfiles.php?group_id=196509

答えて

1

、あなたは[OptionalField]を使用することができますが、これはまだvery brittleです。

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

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

0

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

重要な点は、以下の

  • はGetObjectData(たSerializationInfo情報、StreamingContextコンテキスト)を実装しています。ここでは、情報オブジェクトにキーペアを追加する必要があります。
  • シリアル化コンストラクターMyClass(SerializationInfo info、StreamingContextコンテキスト)を実装します。ここでは、情報オブジェクトから値を取得する必要があります。