Сериализация и наследование - 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>();
}