Постоянная ошибка при десериализации - C#

Узнай цену своей работы

Формулировка задачи:

Пишу свою игрушку. Сделал загрузку через десериализацию класса из xml. Вот код:
public Hero Load_Hero()
            {
                try
                {
                    Hero newPerson = null;
                    XmlSerializer formatter = new XmlSerializer(typeof(Hero));
                    using (FileStream fs = new FileStream("SavedHeroes.xml", FileMode.OpenOrCreate))
                    {
                        try
                        {
                            try { newPerson = (Hero)formatter.Deserialize(fs); }
                            catch (System.InvalidOperationException) {
                                Console.WriteLine("Ошибка! Сохранение героя не найденою Создайте нового героя.");
                                Console.ReadLine();
                                Console.Clear();
                                return null;
                            }
                            Console.WriteLine("Объект загружен");
                            Console.WriteLine("Имя героя -- {0}", newPerson.Name);
                            Console.WriteLine();
                            Console.ReadLine();
                            Console.Clear();
                            return newPerson;
                        } catch (System.InvalidOperationException)
                        {
                            Console.WriteLine("Ошибка! Сохранение героя не найденою Создайте нового героя.");
                            Console.ReadLine();
                            Console.Clear();
                            return null;
                        }
                    }
                }
                catch (System.InvalidOperationException)
                {
                    
                    Console.WriteLine("Ошибка! Сохранение героя не найденою Создайте нового героя.");
                    Console.ReadLine();
                    Console.Clear();
                    return null;
                }
            }
Да, я обернул в try-catch все. Но все равно на строке 11 вылезает ошибка System.InvalidOperationException, тк файл пустой. Помогите пожалуйста P.s. Иногда еще при сохранение героя в xml в самом конце почемуто добавляется лишняя >, я тоже не могу понять почему

Решение задачи: «Постоянная ошибка при десериализации»

textual
Листинг программы
public Hero Load_Hero()
{
    const string savePath = "SavedHeroes.xml";
    Hero newPerson = null;
    if (File.Exists(savePath))
    {
        XmlSerializer formatter = new XmlSerializer(typeof(Hero));
        try
        {
            using (FileStream fs = new FileStream(savePath, FileMode.Open, FileAccess.Read))
            {
                newPerson = (Hero)formatter.Deserialize(fs);
            }
        }
        catch
        {
        }
    }
 
    if (newPerson != null)
    {
        Console.WriteLine("Объект загружен");
        Console.WriteLine("Имя героя -- {0}", newPerson.Name);
        Console.WriteLine();
    }
    else
    {
        Console.WriteLine("Ошибка! Сохранение героя не найденою Создайте нового героя.");
    }
    Console.ReadLine();
    Console.Clear();
 
    return newPerson;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5
Похожие ответы