У меня есть объект, который сериализуется/десериализуется через XmlSerializer в C#, .NET 3.5. Одно из свойств (и больше в будущем) — это коллекция: список, где 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 по умолчанию при создании объекта.
Однако когда мы десериализуем XML-файл, содержащий значения для SomeSetting, эта установка значения по умолчанию вызывает проблемы: десериализатор xml не «сбрасывает» коллекцию SomeSetting — он не стирает ее и не заполняет новыми данными. Скорее, он добавляет к уже имеющимся данным. Итак, если в xml-файле сериализовано Value1, когда я десериализую этот файл, я получаю SomeSettings с {Value1, Value2, Value1} в качестве сохраняемых значений.
Мне нужен способ для процесса десериализации xml, позволяющий моим значениям по умолчанию существовать, когда в документе xml нет данных для SomeSetting, а также для оптовой замены значений SomeSetting, когда в документе xml есть данные. Как я могу это сделать?
К вашему сведению — это не единственное свойство в документе. Документ существует и сериализуется/десериализуется для других «простых» значений. Однако это свойство вызывает проблемы. Я должен поддержать этот сценарий, потому что мне нужно сделать это сейчас.