Лабораторная работа 4
Скачать 0.73 Mb.
|
Лабораторная работа №4 СЕРИАЛИЗАЦИЯ И ДЕСЕРИАЛИЗАЦИЯ ДАННЫХ Цель работы Изучение механизмов сохранения и восстановления состояния объектов. Изучение особенностей сериализации и десериализации данных в разных форматах. Задание На основе проектов, входящих в состав лабораторной работы № 2 и 3, расширить функциональность программы, дополнив классы предметной области, средствами сериализации в файл и десериализации из файла. Необходимо обратить внимание, что для использования сериализации и десериализации в формате JSON необходимо наличие в системе .Net Framework не ниже версии 4.5 (входит в составили выше. Кроме этого, в рабочий проект необходимо самостоятельно добавить ссылку на сборку (assembly) с необходимыми классами (см. рисунок 4.1). Рисунок 4.1 – Подключение в проект сборки с необходимыми для JSON-сериализации классами Функциональность программы (в рамках данной лабораторной работы, таблица 4.2.) должна быть доступна пользователю через меню и/или панель инструментов приложения в виде следующего набора действий загрузки данных из файла с использованием стандартного диалога OpenFileDialog; сохранения в файле с текущим именем файла, которое определяется при загрузке данных или при первом сохранении сохранения (Save As) с предварительным запросом имении типа файла с помощью стандартного диалога SaveFileDialog. Порядок выполнения работы Реализация задач сериализации может быть разделена на две части – создание методов чтения/записи данных для заданных в работе форматов и использование классов-атрибутов для определения структуры сериализуемых данных (таблица 4.1). Таблица 4.1 Задача Формат сериализации JSON Binary XML Блокировка сериализации [IgnoreDataMember] [NonSerialized] [XmlIgnore] Управление полями структур [DataMember] public/private { get; set; } [XmlAttribute] Управление структурами [DataContract] [Serializable] [XmlType] [XmlText] [XmlEnum] Управление коллекциями [CollectionDataContract] [XmlRoot] [XmlElement] Привязка типа к сериализатору DataContractJsonSerializer( typeof(TypeName)) BinaryFormatter() XmlSerializer( typeof(TypeName)) Запись WriteObject(file, obj) Serialize(file, obj) Serialize(file, obj) Чтение ReadObject(file) Deserialize(file) Deserialize(file) Операции чтение и записи достаточно схожи между собой и, например, для формата XML они могут выглядеть следующим образом void Save( string filename, <сериализуемый класс data) { XmlSerializer fmt = new XmlSerializer( typeof (<сериализуемый класс using (FileStream file = new FileStream(filename, FileMode.Create)) { fmt. Serialize(file, data); } } <сериализуемый класс Load( string filename) { XmlSerializer fmt = new XmlSerializer( typeof (<сериализуемый класс using (FileStream file = new FileStream(filename, FileMode.Open)) { return (<сериализуемый класс } } Таблица 4.2 № Сложность Требования к работе Баллы Оценка 1. Базовый уровень Сериализация и десериализация в формате JSON/Binary/XML (по баллу за каждый формат) 1/1/1 2. Использования стандартных компонентов OpenFileDialog и SaveFileDialog 1 3. Выбор формата сохранения данных в окне настроек. и на диске 1 4. Повышенный уровень. Использование ISerializable или IXmlSerializable) в качестве наследуемого интерфейса в классах предметной области 3 5. Варианты задания Задания выполняются в соответствии с вариантами лабораторной работы №2. |