Сериализация и наследование - C# (232698)
Формулировка задачи:
Добрый день.
Немного не могу разобраться с сериализацией при наследовании.
При запуске программы создаётся объект класса TestDocument:
Заполняю формочку данными, нажимаю кнопку "Добавить"
Далее нажимаю кнопку "Сохранить":
И всё хорошо, информация сохраняется в файлик (XML формат).
Содержимое класса TestDocument:
Содержимое класса TestPage:
Теперь создаю класс Single, который наследую от TestPage и добавляю в него новое поле (любое).
Класс Single:
Пробую сохранить в файлик и..."Ошибка при создании документа XML".
Может кто знает как можно эту ошибочку исправить?
Листинг программы
- 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
- {
- }
- }
- }
- }
- }
Листинг программы
- [Serializable]
- public class TestDocument
- {
- public int position = 0;
- public int questionCoint = 0;
- // Коллекция вопросов и ответов
- public List<TestPage> page = new List<TestPage>();
- }
Листинг программы
- [Serializable]
- public class TestPage
- {
- public string question { get; set; }
- public int typeQuestion { get; set; }
- public List<string> answer = new List<string>();
- }
Листинг программы
- [Serializable]
- public class Single:TestPage
- {
- public int ch;
- }
Решение задачи: «Сериализация и наследование»
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>();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д