Обработка ошибки десериализации, когда XML-файл содержит неверные данные - PullRequest
1 голос
/ 27 апреля 2019

Я написал базовый класс хранения настроек для пользовательских вводов, который загружает и сохраняет данные из XML-файла. Это прекрасно работает, когда XML имеет все правильные значения.

Однако одно из значений - это перечисление, в котором некоторые из принятых значений были изменены в обновлениях версии. Из-за этого у некоторых пользователей есть файлы настроек xml, которые больше не совместимы с последней версией.

Поскольку я знаю все возможные предыдущие значения для этого ввода, возможно ли, что когда десериализатор встречает одно из этих значений, он считывает его как другое значение?

public class UserInput
{
    //... long list of variables
    //enum that had its values changed from prior versions but still has the same name
    public MyEnum UserType { get; set; }

    private static XmlSerializer xs;

    static UserInput()
    {
        xs = new XmlSerializer(typeof(UserInput));
    }

    public void SaveToFile(string fileName)
    {
        using (StreamWriter sr = new StreamWriter(fileName))
        {
            xs.Serialize(sr, this);
        }
    }

    public static UserInput ReadFromFile(string fileName)
    {
        using (StreamReader sr = new StreamReader(fileName))
        {
            return xs.Deserialize(sr) as UserInput;
        }
    }
}

Я надеюсь, что смогу вставить проверку в приведенный выше код, чтобы при обнаружении моего измененного перечисления его можно было загрузить в качестве допустимого значения.

...