オブジェクトをシリアル化する場合は、[Serializable]
属性を使用し、すべてのメンバー変数がファイルに書き込まれます。たとえば、私はバージョン管理の仕方を知らない。新しいメンバ変数を追加(変数の名前を変更するか変数を削除する)した後、ファイルを開く(デシリアライズする)場合、どのようにオブジェクト/ファイルのバージョンを決定すれば新しいメンバーを正しく設定できるか、ロード中に変数が初期化されたかどうかは、どのように判断できますか(デシリアライザでは無視されます)。C#でのシリアライゼーションとオブジェクトのバージョン管理
バージョン寛容のアプローチがあり、[OptionalField(VersionAdded = 1)]
属性で変数をマークできます。古いファイルを開くと、フレームワークはこのオプションの(新しい変数)を無視し、ゼロ/ヌルだけになります。しかし、変数が初期化されているかどうか、または無視されたかどうかをもう一度判断することができます。
クラス/オブジェクトのバージョン番号をストリームに書き込むことができます。 ISerializable
アプローチを使用し、constructor(SerializationInfo oInfo, StreamingContext context)
メソッドでこのバージョン番号を読み取ります。これはストリームのクラスバージョンが何であるかを正確に教えてくれるでしょう。
しかし、私はこの種のバージョン管理がC#のストリーミングフレームワークによって既に実装されていることを期待していました。私はSerializationInfo
からアセンブリバージョンを取得しようとしましたが、オブジェクトが保存されたときに使用されたバージョンではなく、常に最新のバージョンに設定されています。
推奨アプローチは何ですか?私は、ネット上の多くの記事を見つけましたが、私はバージョン管理に対処し、このための良い解決策を見つけることができませんでした...
すべてのヘルプは おかげで、 アビス
+1は、.NETのシリアル化とは異なるアプローチを使用することを提案しています。 – Theraot