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

Как работает сериализация

На этом рисунке показан общий процесс сериализации.

График сериализации

Объект сериализуется в поток, который переносит не только данные, но сведения о типе объекта, такие как его версию, язык и региональные параметры, а также имя сборки.Из этого потока объект можно сохранить в базе данных, файле или памяти.

ms233843.collapse_all(ru-ru,VS.120).gifПрименение сериализации

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

ms233843.collapse_all(ru-ru,VS.120).gifПревращение объекта в сериализуемый

Для сериализации объекта требуется объект, который будет сериализован, поток, который будет содержать сериализованный объект, и объект Formatter. Пространство имен System.Runtime.Serialization содержит классы, необходимые для сериализации и десериализации объектов.

Для указания на то, что экземпляры данного типа могут быть сериализованы, примените к типу атрибут SerializableAttribute. При попытке сериализации типа, не имеющего атрибута SerializableAttribute, возникает исключение SerializationException

Если вы не хотите сериализовать поля внутри класса, примените атрибут NonSerializedAttribute. Если поле сериализуемого типа содержит указатель, дескриптор или некоторые другие структуры данных, которые специфичны для определенной среды, и поле не может быть однозначно восстановлено в другой среде, то желательно сделать его несериализуемым.

Если сериализуемый класс содержит ссылки на объекты других классов, которые помечены атрибутом SerializableAttribute, эти объекты также будут сериализуемыми.

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

ms233843.collapse_all(ru-ru,VS.120).gifДвоичная сериализация

При двоичной сериализации используется двоичная кодировка, обеспечивающая компактную сериализацию объекта для хранения или передачи в сетевых потоках на основе сокетов.

ms233843.collapse_all(ru-ru,VS.120).gifXML-сериализация

При XML-сериализации открытые поля и свойства объекта или параметры и возвращаемые значения методов сериализуются в XML-поток в соответствии с особым документом, составленным на языке XSD (язык определения схемы XML). XML-сериализация приводит к образованию строго типизированных классов с открытыми свойствами и полями, которые преобразуются в формат XML.Пространство имен System.Xml.Serialization содержит классы, необходимые для сериализации и десериализации XML.

Для управления способом, с помощью которого XmlSerializer сериализует или десериализует экземпляр класса, можно применять атрибуты к классам и членам класса

ms233843.collapse_all(ru-ru,VS.120).gifSOAP-сериализация

XML-сериализация может также использоваться для сериализации объектов в потоки XML, которые соответствуют спецификации SOAP. SOAP — это протокол, основанный на XML и созданный специально для передачи вызовов процедур с использованием XML. Как и в обычной XML-сериализации, атрибуты можно использовать для управления формой SOAP-сообщений в литеральном стиле, генерируемых веб-службой XML.

Базовая и настраиваемая сериализация

Cуществуют два способа выполнения сериализации: базовая сериализация и настраиваемая сериализация. При базовой сериализации объект сериализуется автоматически при помощи платформы .NET Framework.

ms233843.collapse_all(ru-ru,VS.120).gifБазовая сериализация

Единственное требование при базовой сериализации состоит в том, что объект должен имеет атрибут SerializableAttribute. Для предотвращения сериализации определенных полей можно использовать атрибут NonSerializedAttribute.

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

ms233843.collapse_all(ru-ru,VS.120).gifНастраиваемая сериализация

При настраиваемой сериализации можно указать точно, какие объекты будут сериализованы, и как будет производиться сериализация.Этот класс должен быть помечен атрибутом SerializableAttribute и реализовывать интерфейс ISerializable.

Если требуется, чтобы и десериализация объекта производилась настраиваемым способом, необходимо использовать пользовательский конструктор.

Сериализация конструктора

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

Вверх