Прав ли я в понимании .NET XmlIgnoreAttribute , который говорит:
Указывает методу Serialize XmlSerializer не сериализовать значение открытого поля или свойства общего чтения / записи.
, что:
- Свойство будет десериализовано, если оно присутствует в файле XML?
- Свойство не будет сериализовано в новый файл XML?
Причина, по которой я спрашиваю, состоит в том, что я заменил свойство в файле новым с большим количеством опций. Старое свойство было простым логическим свойством, а новое - перечислением. Я изменил старое свойство, чтобы оно преобразовывало значение нового свойства в логическое значение, в соответствии с тем, что имелось в виду старое свойство до того, как я добавил новое, было реализовано как get, так и set.
Это позволило мне обновить файлы без вывода сообщений, прочитав старое свойство, в котором было установлено новое свойство, и после сериализации добавлено новое свойство.
Однако я хотел бы удалить старое свойство из новых XML-файлов, поэтому мне было интересно, что произойдет, если я пометю его [XmlIgnore]
, будет ли старый XML-файл по-прежнему десериализоваться должным образом и считывать это свойство из файла, или это будет полностью проигнорировано?
Если нет, будет ли следующее изменение делать то, что я хочу?
[XmlAttribute("is-list")]
[DefaultValue(false)]
public bool IsList
{
get { return false; }
set {
if (value)
ListHandling = ListHandling.All;
}
}
Это вернет false для всех новых объектов, что будет проигнорировано, так как я указал значение по умолчанию, и если оно присутствует в старом файле и установлено в true, это изменит свойство ListHandling, которое является новым, которое важно.
Редактировать : После тестирования я убедился, что оба подхода, кажется, выполняют то, что я хочу. Однако я оставлю этот вопрос, поскольку я все еще хотел бы знать, является ли первое поведение, отмеченное выше, просто деталью реализации, или документацию можно понять таким образом.