Сериализация и наследование - 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>(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д