XmlSerializer.Deserialize замораживание в новом потоке после изменения имени класса (но не в потоке пользовательского интерфейса) - PullRequest
0 голосов
/ 21 апреля 2019

Мне пришлось заменить имя класса, но у пользователя все еще может быть много xml-файлов со старым именем класса, поэтому я бы поддержал оба.Проблема в том, что метод Deserialize никогда не возвращается, если старый XML читается с неверным именем класса, если он запускается в новом потоке

Task.Factory.StartNew(() =>
{
    ... //other tasks requiring new thread
    XmlSerializer deserializer = new XmlSerializer(typeof(Newtype));       
    StreamReader reader = new StreamReader(xmlpath);
    Newtype XmlData = (Newtype)deserializer.Deserialize(reader); //freezes thread
    reader.Close(); //never reached

Если я запускаю его в потоке пользовательского интерфейса, он не останавливается, и я получаю

InvalidOperationException: <Oldtype xmlns=''> was not expected.

Если бы я мог получить эту ошибку в вышеупомянутой Задаче, я мог бы сделать string.Replace("Oldtype","Newtype");.

Это ошибка с десериализацией, и есть ли обходной путь?

...