Сериализация в C#

Сериализация в C#

Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье мы рассмотрели работу с классом Path в C#. В данной статье я бы хотел поговорить о том, что такое сериализация в C# и для чего она нужна. Сериализация — это представление объекта в виде потока байтов. Десериализация — это восстановление объекта и его данных из потока байтов. Для каких целей это может применяться:

  • Сохранение объекта в базу данных,
  • Сохранение объекта в файл,
  • Для возможности передачи объектов по сети

Формат передачи этих байтов зависит от того, каким образом выполняется сериализация.

Форматы сериализации

1. Бинарная. В данном случае данные объекта представляются в бинарной форме. Это наиболее оптимальный вариант сериализации с точки зрения скорости и размера. Недостаток данного вида заключается в его привязке к платформе. Допустим: вы передали данные другому программисту, у которого такая же платформа .NET и такая же версия этой платформы. В этом случае он сможет десериализовать данные, в противном случае — нет.

2. JSON — JavaScript Object Notation. Данный вид сериализации особенно удобен для передачи данных межу веб-приложениями. Если посмотреть json-формат данных, то мы увидим, что они представляют из себя javascript-объекты. Можно взять скопировать и вставить в Javascript-код, и это всё будет работать. Подробнее про объекты в Javascript. Очень часто данный формат применяют в клиент-серверных приложениях.

3. XML (eXtensible Markup Language — расширяемый язык разметки). Данный тип сериализации представляет объект в формате XML.

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

Минимальные действия, которые необходимо сделать, чтобы объекты класса были сериализуемы — это повесить на класс атрибут Serializable. По умолчанию, при создании класса, он не считается сериализуемым. При попытке сериализовать объект такого класса вылетит "Exception".

Процесс сериализации объектов

При сериализации полей типа "ValueType" (int, double, char, string, bollean…) просто сохраняется их значение. В случае с ссылочным типом данных сложнее. Если у нас в объекте имеются поля ссылочного типа, то будет сериализоваться не только наш исходный объект, но и те объекты, на которые ссылаются эти поля (будет сериализоваться не один объект, а дерево объектов). Всё это дерево объектов должно принадлежать к сериализуемым классам, в противном случае вылетит "Exception".

Если мы хотим сами определять, что нужно сериализовать, а что нет, и как это делать, т.е. какие данных включать и как их извлекать в дальнейшем, то нужно реализовать интерфейс ISerializable.

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

Более подробно об этом интерфейсе поговорим в следующей статье.

Простой пример того, как должен выглядеть сериализуемый класс:

[Serializable]
class Room
{
  public double length;
  public double width;
  public int windows;
  public Boolean hasFurniture;
}

В данной статье вы узнали, что такое сериализация в C#.

На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.


Комментарии:

Добавить комментарий

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