Поделиться через


Сериализация (Visual Basic)

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

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

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

Рисунок сериализации

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

Используется для сериализации

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

Сериализация JSON

Пространство System.Text.Json имен содержит классы для сериализации и десериализации объектов JavaScript (JSON). JSON — это открытый стандарт, который обычно используется для совместного использования данных в Интернете.

Сериализация JSON сериализует общедоступные свойства объекта в строку, массив байтов или поток, соответствующий спецификации JSON RFC 8259. Чтобы управлять способом JsonSerializer сериализации или десериализации экземпляра класса, можно использовать один или несколько следующих подходов:

Двоичная и XML-сериализация

Пространство System.Runtime.Serialization имен содержит классы для двоичной и XML-сериализации и десериализации.

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

Предупреждение

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

Создание сериализуемого объекта

Чтобы сериализовать объект с помощью двоичной или XML-сериализации, необходимо, чтобы объект сериализовался, поток, содержащий сериализованный объект и объект Formatter. System.Runtime.Serialization содержит классы, необходимые для сериализации и десериализации объектов.

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

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

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

Двоичная сериализация

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

Сериализация XML

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

Атрибуты можно применять к классам и членам класса, чтобы управлять XmlSerializer способом сериализации или десериализации экземпляра класса.

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

Двоичная и XML-сериализация могут выполняться двумя способами, базовыми и настраиваемыми. Базовая сериализация использует .NET для автоматической сериализации объекта.

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

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

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

Сериализация проектировщика

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

Связанные статьи

Практическое руководство. Чтение данных объекта из XML-файла (Visual Basic)
Показывает, как считывать данные объекта, ранее записанные в XML-файл с помощью XmlSerializer класса.

Практическое руководство. Запись данных объекта в XML-файл (Visual Basic)
Показывает, как записывать объект из класса в XML-файл с помощью XmlSerializer класса.