オブジェクトをシリアル化したい場合は、[Serializable]
属性を使用する必要があり、すべてのメンバー変数がファイルに書き込まれます。バージョン管理の方法がわかりません。たとえば、新しいメンバー変数を追加 (変数の名前を変更するか、変数を削除するだけ) してから、ファイルを開く (逆シリアル化する) 場合、オブジェクト/ファイルのバージョンをどのように判断して、正しく行うことができますか?新しいメンバーを設定するか、何らかの移行を行いますか? ロード中に変数が初期化されたかどうかを判断するにはどうすればよいですか (デシリアライザーによって無視されます)。
[OptionalField(VersionAdded = 1)]
バージョントレラントなアプローチがあり、変数に属性をマークできることを知っています。古いファイルを開くと、フレームワークはこのオプション (新しい変数) を無視し、ゼロ/ヌルになります。しかし、変数がロードによって初期化されているか、無視されているかを判断するにはどうすればよいですか。
クラス/オブジェクトのバージョン番号をストリームに書き込むことができます。ISerializable
アプローチを使用し、constructor(SerializationInfo oInfo, StreamingContext context)
メソッドでこのバージョン番号を読み取ります。これにより、ストリーム内のクラスのバージョンが正確にわかります。
ただし、この種のバージョン管理は、C# のストリーミング フレームワークによって既に実装されていると予想していました。からアセンブリ バージョンを取得しようとしましたSerializationInfo
が、オブジェクトが保存されたときに使用されたバージョンではなく、常に現在のバージョンに設定されています。
好ましいアプローチは何ですか?ネットでたくさんの記事を見つけましたが、バージョン管理に対処するための良い解決策を見つけることができませんでした...
どんな助けでも大歓迎ですありがとう、アビス