Серіалізация в c #

Серіалізация в c #

Всім доброго часу доби. На зв'язку Олексій Гулинін. У минулій статті ми розглянули роботу з класом Path в C #. У даній статті я б хотів поговорити про те, що таке сериализация в C # і для чого вона потрібна. Серіалізация - це уявлення об'єкта у вигляді потоку байтів. Десеріалізацію - це відновлення об'єкта і його даних з потоку байтів. Для яких цілей це може застосовуватися:

  • Збереження об'єкта в базу даних,
  • Збереження об'єкта в файл,
  • Для можливості передачі об'єктів по мережі

Формат передачі цих байтів залежить від того, яким чином виконується сериализация.

формати сериализации

1. Бінарна. В даному випадку дані об'єкта представляються в бінарній формі. Це найбільш оптимальний варіант сериализации з точки зору швидкості і розміру. Недолік даного виду полягає в його прив'язці до платформи. Припустимо: ви передали дані іншому програмісту, у якого така ж платформа .NET і така ж версія цієї платформи. У цьому випадку він зможе десеріалізовать дані, в іншому випадку - ні.

3. XML (eXtensible Markup Language - розширювана мова розмітки). Даний тип сериализации представляє об'єкт в форматі XML.

4. Також зазначу, що можна написати свій власний серіалізатор, який буде представляти об'єкти в тому вигляді, в якому вам потрібно.

Мінімальні дії, які необхідно зробити, щоб об'єкти класу були Серіалізуемое - це повісити на клас атрибут Serializable. За замовчуванням, при створенні класу, він не вважається серіалізуемим. При спробі серіалізовать об'єкт такого класу вилетить "Exception".

Процес серіалізації об'єктів

При сериализации полів типу "ValueType" (int, double, char, string, bollean ...) просто зберігається їх значення. У випадку з посиланнями типом даних складніше. Якщо у нас в об'єкті є поля посилального типу, то буде серіалізовані не тільки наш вихідний об'єкт, але і ті об'єкти, на які посилаються ці поля (буде серіалізовані не один об'єкт, а дерево об'єктів). Все це дерево об'єктів має належати до серіалізуемим класів, в іншому випадку вилетить "Exception".

Якщо ми хочемо самі визначати, що потрібно серіалізовать, а що ні, і як це робити, тобто які даних включати і як їх використовувати в подальшому, то потрібно реалізувати інтерфейс ISerializable.

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

Більш докладно про це інтерфейсі поговоримо в наступній статті.

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

У даній статті ви дізналися, що таке сериализация в C #.

Ще статті.

  • Серіалізация в c #
    Інтерфейси C #
  • Серіалізация в c #
    StringBuilder C #
  • Серіалізация в c #
    Явна і неявне перетворення в c #
  • Серіалізация в c #
    Path в C #
  • Серіалізация в c #
    Json-сериализация в C #