Сериализация и десериализация данных в C#

Что такое сериализация и десериализация?

Сериализация - это механизм преобразования объекта в поток байтов или текста. Deserialization берет ряд байтов или плоский файл и преобразует его в объект.

Почему требуется сериализация данных?

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

Сериализация сериализует только данные, хранящиеся в объекте. Методы не сериализованы.
Когда вы десериализуете объект, вам нужен доступ к первоначальному определению класса, или вы получите объект, который хранит данные только.
Вы можете создать пользовательский объект передачи данных (DTO), чтобы оптимизировать объем данных, которые вы должны сериализовать.

.NET Framework предоставляет пространства имен System.Runtime.Serialization и System.Xml.Serialization, которые помогут с сериализацией и десериализацией вашего объекта.

.NET Framework предоставляет три механизма сериализации, которые вы можете использовать по умолчанию:

  • XmlSerializer
  • DataContractSerializer
  • BinaryFormatter

Использование XmlSerializer

XmlSerializer был создан для поддержки обмена сообщениями протокола Simple Object Access Protocol (SOAP). SOAP - это протокол для обмена информацией с веб-службами. SOAP использует XML в качестве формата сообщений. XML не зависит от среды и читается как людьми, так и машинами.

Давайте посмотрим на приведенный ниже пример по сериализации объекта с помощью XmlSerializer.

В приведенном выше примере класс Person помечен Serializable. Все члены этого типа автоматически сериализуются, если они не откажутся.

Вывод:

В XmlSerializer вам необходимо пометить ваши типы с помощью атрибута [Serializable]. Это сообщает .NET Framework, что ваш тип должен быть сериализуемым. Если сериализация невозможна, вы получите исключение во время выполнения.

Вы можете настроить, как XmlSerializer сериализует ваш тип с помощью атрибутов.
Эти атрибуты определены в пространстве имен System.Xml.Serialization.
Важными атрибутами являются:
1. XmlIgnore
2. XmlAttribute
3. XmlElement
4. XmlArray
5. XmlArrayItem
По умолчанию каждый член сериализуется как элемент XmlElement

Использование атрибутов XML для настройки сериализации

Использование двоичной сериализации

XmlSerializer выводит текст, читаемый человеком. Вы можете открыть его в Notepad.But, используя двоичный формат, вы получите меньший результат.
Использование двоичной сериализации аналогично XmlSerializer.
Вам нужно отметить элемент с помощью параметра SerializableAttribute, а затем вы используете экземпляр двоичного сериализатора для сериализации объекта. Рамка .net обеспечивает System.Runtime.Serialization и System.Runtime.Serialization.Formatters.Binary пространства имен для поддержки двоичной сериализации.

Например:

В Binary Serialization частные поля по умолчанию сериализуются. Во время десериализации конструкторы не выполняются.
вы можете запретить сериализацию полей с использованием атрибута [NonSerialized], такого как XmlSerialization.

Если XMLserializer не может найти определенное поле, он не будет генерировать исключение; он просто установит свойство по умолчанию.
Но в двоичной сериализации она генерирует исключение. Таким образом, вы можете использовать OptionFieldAttribute, чтобы убедиться, что двоичный сериализатор знает, что поле добавлено в более позднюю версию.

Вы можете влиять на процесс сериализации и десериализации, используя следующие четыре атрибута:
1. OnDeserializedAttribute
2. OnDeserializingAttribute
3. OnSerializedAttribute
4. OnSerializingAttribute.
Вы можете добавить эти атрибуты к методам внутри вашего класса, которые принимают StreamingContext в качестве параметра.

Давайте рассмотрим ниже код о том, как добавить эти атрибуты в метод:

Вывод:

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

Использование DataContractSerializer

DataContract Serialization в основном используется с WCF.

Серийный анализатор данных используется WCF для сериализации ваших объектов в XML или JSON.
Основное различие заключается в том, что вместо DataContractAttribute вы используете SerializableAttribute.
Другим важным отличием является то, что члены не сериализуются по умолчанию. Вы должны явно отмечать их атрибутом DataMember.

Давайте рассмотрим пример использования контракта Data & DataContract Serialization.

Использование DataContract

Использование JSON

JSON очень полезен при отправке небольших объемов данных между веб-сервером и клиентом с использованием асинхронного JavaScript и XML (AJAX).

 

Источник: http://www.csharpstar.com/serialize-and-deserialize-data-csharp/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *