C#、.NET 3.5 の XmlSerializer を介してシリアル化/逆シリアル化されているオブジェクトを取得しました。プロパティの 1 つ (および将来的にはさらに追加) はコレクションです: T は列挙値です。これにより、正常にシリアル化/逆シリアル化されます。
また、シリアル化されたバージョンに値が設定されていない場合に備えて、「デフォルト値」メカニズムを使用してオブジェクトのデフォルト値を提供しています。簡単な例として、これがドンです。
public enum MyEnum {
Value1,
Value2
}
public class Foo
{
public List SomeSetting{ get; set; }
public Foo()
{
SomeSetting = new List();
SomeSetting.Add(MyEnum.Value1);
SomeSetting.Add(MyEnum.Value2);
}
}
このコードは、オブジェクトの構築時に SomeSetting の既定値を設定するのに適切に機能します。
ただし、SomeSetting の値を持つ xml ファイルを逆シリアル化する場合、この既定値の設定が問題を引き起こします。xml デシリアライザーは SomeSetting コレクションを「リセット」しません。これは、クリーンアップして新しいデータを入力しません。むしろ、既存のデータに追加されます。したがって、xml ファイルにシリアル化された Value1 が含まれている場合、そのファイルを逆シリアル化すると、格納されている値として {Value1, Value2, Value1} を持つ SomeSettings になります。
xml ドキュメントに SomeSetting のデータがない場合にデフォルト値が存在できるようにする方法と、xml ドキュメントにデータがある場合に SomeSetting 値を大規模に置き換える方法が必要です。これどうやってするの?
参考までに、ドキュメント内のプロパティはこれだけではありません。ドキュメントは存在し、他の「単純な」値に対してシリアライズ/デシリアライズされています。ただし、これは問題を引き起こしているプロパティです。今、これをたくさん行う必要があるため、このシナリオをサポートする必要があります。