我有一个对象正在通过 C#、.NET 3.5 中的 XmlSerializer 进行序列化/反序列化。其中一个属性(以及未来的更多属性)是一个集合: List 其中 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 序列化到其中,当我反序列化该文件时,我最终会得到 SomeSettings 具有 {Value1, Value2, Value1} 作为存储的值。
我需要一种 xml 反序列化过程的方法,以在 xml 文档中没有 SomeSetting 的数据时允许我的默认值存在,并在 xml 文档中有数据时批量替换 SomeSetting 值。我怎样才能做到这一点?
仅供参考 - 这不是文档中的唯一属性。该文档确实存在,并且正在针对其他“简单”值进行序列化/反序列化。但是,这是导致问题的属性。我必须支持这种情况,因为我现在需要做很多事情。