Параграф 1. Про сериализации об'єктів
Серіалізация - процес перетворення деякого об'єкта (класу) в послідовність байтів з метою збереження в пам'яті (базі даних, файлі), відправки об'єкта віддаленого додатком за допомогою веб-служби, передача об'єкта з одного домену в інший, передача об'єкта через брандмауер у вигляді XML-рядки і зберігання інформації про безпеку або конкретного користувача, що використовується кілька різних програм. Серіалізация - процес двонаправлений і має на меті не тільки зберегти і передати в зручному вигляді даних, а й можливість відтворити його при необхідності у вигляді вихідного об'єкта. Зворотний процес називається десеріалізацію.
Простір імен System.Runtime.Serialization містить класи, необхідні для сериализации і десеріалізациі об'єктів.
Для того, що б об'єкт міг бути серіалізовані, він повинен бути поміченим як Серіалізуемое об'єкт:
Додатково в об'єкті частина інформації може вимагати або не вимагати збереження і подальшого відновлення, в цьому випадку застосовується мітки-атрибути [SerializableAttribute] і [NonSerializedAttribute].
Cеріалізуемая інформація містить не тільки дані, але і відомості про тип об'єкта (версію, мову і регіональні параметри, а також ім'я збірки).
Основну інформацію щодо виконання сериализации проводить спеціальний об'єкт - Formatter.
Як ми вже відзначали, розрізняють двійкову і XML-сериализацию. При XML-сериализации інформація серіалізуются в XML-потік. XML-сериализация може також використовуватися для сериализации об'єктів в потоки XML, які відповідають специфікації SOAP (Simple Object Access Protocol - простий протокол доступу до об'єктів). SOAP - це протокол, заснований на XML і створений спеціально для передачі викликів процедур з використанням XML.
Параграф 2. Приклад створення класу для двійковій сериализации
Отже, створимо порожнє поки рішення (наприклад, з ім'ям myProject) додатки і додамо до нього клас, який буде виконувати функції словника. У вікні "Solutation Explorer" (Меню Viev | Solutation Explorer) виконаємо правий клік мишкою на файлі проекту і додамо нову опцію (Рис.1.).
![С # для windows (windows) С # для windows](https://images-on-off.com/images/126/sdlyawindows-cbd037dd.jpg)
Рис.1 Створення програми та додавання класу для сериализации
![С # для windows (windows) С # для windows](https://images-on-off.com/images/126/sdlyawindows-805084f2.jpg)
Рис.2 Створення програми та добавденіе класу для сериализации
У код класу, який ми хочемо зробити серіалізуемим додамо позначений як Серіалізуемое об'єкт - [Serializable]:
В клас dictionary додамо методи, які роблять клас словником, наприклад Hashtable, яка надає колекцію пар ключ / значення, які впорядковані за хеш-коду ключа і яка власне буде зберігати словник. При додаванні елемента в колекцію Hashtable він поміщається в певний сегмент в залежності від хеш-коду ключа. Надалі пошук ключа здійснюється тільки в певному сегменті з використанням хеш-коду ключа. Таким чином, в значній мірі зменшується кількість операцій порівняння ключів, яке потрібно для знаходження елемента. Отже, першим додамо:
Далі знадобляться такі методи, як число значень, перевірки наявності слова в словнику, метод перекладу слова, додавання і видалення записів в словник:
Параграф 3. Робота по сериализации і десеріалізациі класу
Першим в основному додатку додаємо необхідні простору імен, а саме:
І відповідно оголошуємо нащадка створеного класу, і робимо з нього робочий клас - workDict = new workDict () ;.
Далі можна користуватися методами додавання і видалення даних в словник, описаних вище.
Залишилося зберегти словник в серіалізовані вигляді і завантажити знову словник в пам'ять.
Запис можна виконати так (sCurDir - поточна директорія старту програми - там ми будемо розміщувати і словник):
Для завантаження серіалізовані файлу словника можна скористатися наступною функцією:
Ось і всі тонкощі роботи з двійковій сериализации і десіреалізаціі, наведені на кокретного прикладі роботи зі словником.