Сохранение коллекций объектов

Сохранение коллекций объектов

Теперь вы знаете, как сохранить в потоке отдельный объект, и давайте выясним, как сохранить множество объектов. Заметим, что метод Serialize() интерфейса IFormatter не позволяет указать произвольное число объектов (а только один System.Object). Аналогично, возвращаемым значением Deserialize() тоже является один System.Object.

public interface IFormatter {

 …

 object Deserialize(System.IO.Stream serializationStream);

 void Serialize(System.IO.Stream serializationStream, object graph);

}

Напомним, что System.Object фактически представляет весь объектный граф. Поэтому при передаче объекта, обозначенного атрибутом [Serializable] и содержащего другие объекты [Serializable], будет сохранен сразу весь набор объектов. Большинство типов, находящихся в рамках пространства имен System.Collections и System.Collections.Generic, уже обозначены атрибутом [Serializable]. Таким образом, чтобы сохранить набор объектов, просто добавьте этот набор в контейнер (например, в ArrayList или List‹›) и выполните сериализацию полученного объекта в подходящий поток.

Предположим, что в класс JamesBondCar был добавлен конструктор с двумя аргументами, чтобы можно было установить некоторые начальные данные состояния (обратите внимание на то, что конструктор, заданный по умолчанию, был возвращен на место в соответствии с требованиями XmlSerializer),

[Serializable,

XmlRoot(Namespace = "http://www.intartechtraining.com")]

public class JamesBondCar: Car {

 public JamesBondCar(bool skyWorthy, bool seaWorthy) {

  canFly = skyWorthy; canSubmerge = seaWorthy;

 }

 // Для XmlSerializer нужен конструктор, заданный по умолчанию!

 public JamesBondCar(){}

 …

}

При этом вы сможете сохранить любое число объектов JamesBondCar так.

static void Main(string[] args) {

 …

 // Сохранение объекта List‹› с набором JamesBondCar.

 List‹JamesBondCar› myCars = new List‹JamesBondCar›();

 myCars.Add(new JamesBondCar(true, true));

 myCars.Add(new JamesBondCar(true, false));

 myCars.Add(new JamesBondCar(false, true));

 myCars.Add(new JamesBondCar(false, false));

 fStream = new FileStream("CarCollection.xml", FileMode.Create, FileAccess.Write, FileShare.None);

 xmlFormat = new XmlSerializer(typeof(List‹JamesBondCar›), new Type[] {typeof(JamesBondCar), typeof(Car), typeof(Radio)});

 xmlFormat.Serialize(fStream, myCars);

 fStream.Close();

 Console.ReadLine();

}

Снова обращаем внимание на то, что по причине использования XmlSerializer требуется указать информацию типа для каждого из объектов, вложенных в корневой объект (которым в данном случае является List‹›). При использовании BinaryFormatter или SoapFormatter программная логика будет еще проще.

statiс void Main (string[] args) {

 …

 // Сохранение объекта List‹›(myCars) в двоичном формате.

 list‹JamesBondCar› myCars = new List‹JamesBondCar›();

 …

 BinaryFormatter binFormat = new BinaryFormatter();

 Stream fStream = new FileStream("AllMyCars.dat", FileMode.Create, FileAccess.Write, FileShare.None);

 binFormat.Serialize(fStream, myCars);

 fStream.Close();

 Console.ReadLine();

}

Превосходно! К этому моменту вам должно быть понятно, как использовать сервис сериализации объектов для упрощения процесса сохранения и восстановления данных вашего приложения. Теперь давайте выясним, как использовать пользовательские настройки процесса сериализации.

Исходный код. Проект SimpleSerialize размещен в подкаталоге, соответствующем главе 17.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Сохранение документов

Из книги Компьютер на 100. Начинаем с Windows Vista автора Зозуля Юрий

Сохранение документов После набора текста в программе Блокнот его необходимо сохранить. Для этого в меню Файл выполните команду Сохранить. Появится окно сохранения документа (рис. 1.18). По умолчанию система предлагает сохранить файл в папке Документы, с чем вы можете


Сохранение страниц

Из книги Работа в Интернете автора Макарский Дмитрий

Сохранение страниц Практически любой современный браузер позволяет сохранять открытые веб-страницы на жесткий диск компьютера. Это может пригодиться, если в Интернете найдена какая-то интересная информация, которую можно будет использовать в дальнейшем, не


Создание пользовательских обобщенных коллекций

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Создание пользовательских обобщенных коллекций Итак, пространство имен System.Collections.Generic предлагает множество типов, позволяющих создавать эффективные контейнеры, удовлетворяющие требованиям типовой безопасности. С учетом множества доступных вариантов очень велика


Сохранение документа

Из книги Adobe Photoshop CS3 автора Завгородний Владимир

Сохранение документа Во время работы с документом нам необходимо будет сохранять его. Сделать это можно несколькими способами. В меню File (Файл) существует четыре команды сохранения документа:• Save (Сохранить) – текущий документ сохраняется в том же формате и под тем же


Сохранение

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Сохранение Принцип сохранения в Pinnacle Studio 11 несколько отличается от принципа сохранения файлов в других приложениях. В Studio сохранение во многих случаях выполняется автоматически, что позволяет при сбое программы продолжить работу с проектом, в котором если и были


Сохранение документа

Из книги Adobe InDesign CS3 автора Завгородний Владимир

Сохранение документа Первая и главнейшая операция при работе с документом – это его сохранение. Читатели, имеющие значительный опыт работы с компьютерами, знают, как неприятно потерять полчаса или час работы из-за сбоя питания компьютера или «зависания» программы.К


Сохранение страниц

Из книги Популярный самоучитель работы в Интернете автора Кондратьев Геннадий Геннадьевич

Сохранение страниц Часто бывает, что вы нашли любопытную страницу, но на ней слишком много полезной информации, а время и деньги утекают, как вода. В этом случае весьма полезно сохранить веб-страницу на жесткий диск, чтобы потом, отключившись от Интернета, спокойно ее


Сохранение версий

Из книги Реферат, курсовая, диплом на компьютере автора Баловсяк Надежда Васильевна

Сохранение версий В процессе работы над курсовой или дипломной работой, а в особенности над диссертацией, необходимо сохранять не только все изменения, которые вносятся в текст документа, но и первоначальные варианты. Например, вы можете что-то исправить, а потом


Защита объектов ядра и приватных объектов

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Защита объектов ядра и приватных объектов Многие объекты, такие как процессы, потоки или мьютексы, являются объектами ядра (kernel objects). Для получения и установки дескрипторов безопасности ядра используются функции GetKernelObjectsSecurity и SetKernelObjectsSecurity, аналогичные функциям защиты


Оценка преимуществ использования коллекций

Из книги VBA для чайников автора Каммингс Стив

Оценка преимуществ использования коллекций Если вы чувствуете себя вполне уверенно при работе с объектами VBA, то использование объектов Collection для управления множествами элементов может оказаться для вас более простым, чем использование массивов. Методы Add и Remove


17.5. Сохранение презентации

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

17.5. Сохранение презентации Вы можете сохранить презентацию как во внутреннем формате OOo Impress, так и в формате MS PowerPoint. Для этого при сохранении презентации просто выберите нужный вам формат (рис. 17.11). Совет Обратите внимание: в новой версии OpenOffice.org в программе Impress


СОХРАНЕНИЕ ИНФОРМАЦИИ

Из книги Omert@. Руководство по компьютерной безопасности и защите информации для Больших Боссов автора Экслер Алекс

СОХРАНЕНИЕ ИНФОРМАЦИИ Как уже говорилось, мало создать — нужно сохранить. К вопросам сохранения информации напрямую относятся две темы: защита от сбоев электропитания (вечный бич компьютеров) и организация архивирования (бэкапа) данных.ЕСЛИ В ПРОВОДАХ ВНЕЗАПНО


4.11.8. Сохранение фильтра

Из книги Linux глазами хакера автора Флёнов Михаил Евгеньевич

4.11.8. Сохранение фильтра Если попробовать сейчас перезагрузить систему и просмотреть цепочки сетевого экрана, то все наши изменения исчезнут. Проблема в том, что ОС автоматически их не запоминает, и мы сами должны позаботиться о сохранении правил. Для этого существует


Хранение элементов в коллекциях и получение элементов из коллекций

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Хранение элементов в коллекциях и получение элементов из коллекций Коллекции — это такие объекты, в экземплярах которых могут храниться другие объекты. Одна из самых распространенных разновидностей коллекций — это массив, который инстанцирует NSArray или NSMutableArray. В


12.6. Сохранение объектов в файлах

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

12.6. Сохранение объектов в файлах Постановка задачи Вы добавили в ваш проект новый класс и теперь хотите сохранить этот объект на диск в виде файла, а потом в случае необходимости считать этот файл с


Классы коллекций и связанные типы

Из книги автора

Классы коллекций и связанные типы List<T> Динамический массив Stack<T> Стек - набор элементов, реализованных по принципу последний вошел-первый вышел Queue<T> Очередь - набор элементов, реализованных по принципу первый вошел-первый вышел LinkedList<T>