私はシリアル化に頭を悩ませようとしています。しかし、何らかの理由で値やプロパティを追加または削除する必要がある場合はどうなりますか? これはコンテンツにどのように影響しますか?それとも、これは問題ではありませんか? または、どうすればこれを回避できますか?
3 に答える
人々がすでに指摘したように、シリアライザーに依存します。XmlSerializer
この場合、処理がいくらか簡単になります。
- シリアライザーはパブリック インターフェイスに対して動作するため、実装を変更しても問題はありません。
- XML は人間が判読できるため、手動で、または一部の XML ユーティリティを使用して簡単に解析できます。したがって、他のすべてがうまくいかない場合は、バージョンコンバーターを作成できます。
NonSerialized
特にとOptionalField
属性に関するその他のヒントについては、ジョンの回答を検討してください。
それはすべて、使用しているシリアライゼーション手法と、レガシー オブジェクトのデシリアライズを計画しているかどうかによって異なります。
プロパティを追加または削除しても、古いバージョンのオブジェクトを逆シリアル化したい場合、実行しているシリアル化の種類によっては、いくつかの問題が発生する可能性があると思います。
BinaryFormatterおよびSoapFormatterの場合:
- 新しいプロパティを追加する場合は、新しいフィールドを持たない古いバージョンのオブジェクトを引き続き逆シリアル化できるように、それらをOptionalField 属性で装飾する必要があります。
- プロパティを「削除」する場合は、それらをコードに残す必要がありますが、削除されたフィールドがまだある古いバージョンのオブジェクトを引き続き逆シリアル化できるように、 OptionalField 属性で装飾する必要があります。
私自身のプロジェクトで広く使用されている XmlSerializer について話すことができます。
プロパティを追加しても、XmlSerializer で問題が発生することはありません。シリアル化された xml から欠落しているプロパティは、単にデフォルト値を保持します。既存のプロパティを削除または名前変更すると、データが失われるだけです。元の xml AS xml またはテキスト ファイルを処理しない限り、削除または名前変更されたプロパティのデータは単純に失われます。XmlSerializer を使用する場合、プロパティを追加、削除、または名前変更するために特別な属性は必要ありません。