を介していくつかの単純なクラスをディスクに永続化する既存のコードベースNetDataContractSerializer
がありますが、残念ながらクラスは[DataContract]
ではなく で装飾されてい[Serializable]
ます。これは問題なく動作しますが、古いバージョンで生成されたファイルを引き続き読み取ることができるようにしながら、永続化されたクラスにいくつかの新しいプロパティを追加したいと考えています。
これがクラスだとしましょう:
[Serializable]
public class Persisted
{
public int OldProperty {get;set;}
public int NewProperty {get;set;}
}
ここで、古いファイルを逆シリアル化すると、含まれていないため例外が発生しますNewProperty
。意味あり。NewProperty
したがって、無視したかったの[OptionalField]
ですが、欠落しているフィールドをシリアライザーに無視させる属性がありますが、プロパティには適用できません-フィールドのみです。
したがって、プロパティも持つ[DataContract]
andを使用することにしましたが、これによりシリアル化されたファイルのレイアウトが変更され、古いデータ ファイルを読み取ることができなくなります。さらに、混在させることはできません。シリアライザーが属性を認識した場合、ディレクティブは無視されます。[DataMember]
IsRequired
[Serializable]
[DataMember]
[Serializable]
[DataMember]
では、古いファイルを 1 回だけ変換するオプション (可能ですが、私の最初の選択ではありません) を除いて、既存の XML シリアル化オブジェクトのフィールドを無視するように NetDataContractSerializer を取得する方法はありますか?