Сериализация и наследование - C# (232698)

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

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

Добрый день. Немного не могу разобраться с сериализацией при наследовании. При запуске программы создаётся объект класса TestDocument:
        TestDocument document = new TestDocument();
Заполняю формочку данными, нажимаю кнопку "Добавить"
        // Добавить
        private void button1_Click(object sender, EventArgs e)
        {
                // Создаю задание
                TestPage list = new Single();
                // Получаю тип задания
                list.typeQuestion = 1;
                // Получаю название задания
                list.question = textBox1.Text;
                // Получаю варианты ответов
                list.answer.Add(textBox2.Text);
                list.answer.Add(textBox3.Text);
                list.answer.Add(textBox4.Text);
                list.answer.Add(textBox5.Text);
 
                // Добавление элемента в коллекцию
                document.page.Add(list);
        }
Далее нажимаю кнопку "Сохранить":
        // Сохранить
        private void button3_Click(object sender, EventArgs e)
        {
            XmlSerializer xml = new XmlSerializer(typeof(TestDocument));
            
            // Настройка окна сохранения документов
            SaveFileDialog save = new SaveFileDialog();
            save.Filter = "test files (*.tst)|*.tst";
            save.RestoreDirectory = true;
 
            // Сохранение в файл
            if (save.ShowDialog() == DialogResult.OK)
            {
                if (save.FileName != null)
                {
                    using (Stream fStream = new FileStream(save.FileName, FileMode.Create, FileAccess.Write, FileShare.None))
                    {
                        // Сериализация 
                        try
                        {
                            xml.Serialize(fStream, document);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        finally
                        {
 
                        }
                    }
                }
 
            }
        }
И всё хорошо, информация сохраняется в файлик (XML формат). Содержимое класса TestDocument:
    [Serializable]
    public class TestDocument
    {
        public int position = 0;
        public int questionCoint = 0;
        // Коллекция вопросов и ответов
        public List<TestPage> page = new List<TestPage>();
    }
Содержимое класса TestPage:
    [Serializable]
    public class TestPage
    {
        public string question { get; set; }
        public int typeQuestion { get; set; }
        public List<string> answer = new List<string>();
    }
Теперь создаю класс Single, который наследую от TestPage и добавляю в него новое поле (любое). Класс Single:
    [Serializable]
    public class Single:TestPage
    {
        public int ch;
    }
Пробую сохранить в файлик и..."Ошибка при создании документа XML". Может кто знает как можно эту ошибочку исправить?

Решение задачи: «Сериализация и наследование»

textual
Листинг программы
[Serializable(), XmlInclude(typeof(Single))]
    public class TestDocument
    {
        public TestDocument() { }
 
        public int position = 0;
        public int questionCoint = 0;
        // Коллекция вопросов и ответов
        public List<TestPage> page = new List<TestPage>();
    }

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


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

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

15   голосов , оценка 4 из 5