Для простоты здесь я покажу свой пример кода с использованием fruit.На самом деле я делаю что-то более значимое (мы надеемся).Допустим, у нас есть перечисление:
public enum FruitType
{
Apple,
Orange,
Banana
}
и класс:
[Serializable]
public class Fruit
{
public FruitType FruitType { get; set; }
public Fruit(FruitType type)
{
this.FruitType = type;
}
}
Мы можем его сериализовать и десериализовать.Теперь, давайте пересмотрим перечисление, чтобы оно стало таким:
public enum FruitType
{
GreenApple,
RedApple,
Orange,
Banana
}
При десериализации ранее сериализованных объектов вы получаете исключение System.InvalidOperation
, поскольку Apple
(оригинальный элемент перечисления) недопустим.Объект не десериализован.
Один из способов, которым я смог решить эту проблему, - присвоить свойству FruitType
в классе Fruit
другое имя при сериализации следующим образом:
[XmlElement(ElementName = "Mode")]
public FruitType FruitType { get; set; }
Теперь во время десериализации старое свойство игнорируется, так как оно не найдено.Я хотел бы знать, есть ли способ игнорировать / пропускать недопустимые элементы перечисления во время десериализации, чтобы не генерировалось исключение и объект по-прежнему десериализовался.