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

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

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

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

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

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

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут