Сериализация и десериализация в C#: практический пример
Сериализация и десериализация в C#
Сериализация и десериализация необходимы, когда данные объекта должны перемещаться между приложениями или сохраняться между сессиями. В C# сериализация записывает состояние объекта в носитель — обычно файл — а десериализация восстанавливает объект из этого сохранённого представления.
Рассмотрим простой класс Tutorial, содержащий два свойства: ID и Name. Сериализуя экземпляр этого класса в файл, мы можем позже прочитать файл и воссоздать тот же объект с исходными данными.
Как сериализовать объект в C#
Ниже пошаговое руководство, демонстрирующее процесс в консольном приложении.
- Создайте класс
Tutorialсо свойствамиIDиName. - Инстанцируйте класс, присвоив
ID = 1иName = ".Net". - Сериализуйте объект в файл
Example.txt. - Десериализуйте объект из файла и отобразите его значения в консоли.
Вставьте следующий код в ваш файл Program.cs.
Шаг 1) Добавьте класс. Первый шаг — добавить класс, который будет сериализован.

Пояснение кода:
- Класс должен быть отмечен атрибутом
[Serializable]; иначе сериализация не сработает. - Определяем класс
Tutorialс двумя полями:int IDиstring Name.
Шаг 2) Создайте объект и сериализуйте его. На этом шаге мы создаём экземпляр Tutorial и записываем его в Example.txt.

Пояснение кода:
- Создаём экземпляр
Tutorialи устанавливаемID = 1иName = ".Net". - Инстанцируем
BinaryFormatter(примечание:BinaryFormatterустарел в .NET 5+; для продакшн-кода рассмотритеSystem.Text.JsonилиXmlSerializer). - Открываем
FileStreamв режимеFileMode.CreateиFileAccess.Writeдля записи бинарных данных. - Вызываем
formatter.Serializeдля записи объекта в поток, затем закрываем поток.
Шаг 3) Десериализуйте объект. Наконец, прочитайте данные обратно из файла для проверки процесса.

using System;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace DemoApplication {
[Serializable]
class Tutorial {
public int ID;
public string Name;
static void Main(string[] args) {
Tutorial obj = new Tutorial();
obj.ID = 1;
obj.Name = ".Net";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("E:\\ExampleNew.txt", FileMode.Create, FileAccess.Write);
formatter.Serialize(stream, obj);
stream.Close();
stream = new FileStream("E:\\ExampleNew.txt", FileMode.Open, FileAccess.Read);
Tutorial objnew = (Tutorial)formatter.Deserialize(stream);
Console.WriteLine(objnew.ID);
Console.WriteLine(objnew.Name);
Console.ReadKey();
}
}
}
Пояснение кода:
- Открываем файл в режиме чтения.
- Десериализуем бинарные данные обратно в экземпляр
Tutorial. - Печатаем
IDиNameв консоль.
Запуск программы в Visual Studio даёт следующий вывод:
Вывод:

Как видно, значения корректно восстановлены из файла.
Резюме
Сериализация записывает данные объекта в файл, а десериализация читает эти данные обратно в объект. Эта фундаментальная техника лежит в основе многих сценариев обмена данными в .NET.
Язык C
- Классы и объекты в C#: Фундаменты надёжного ООП
- Абстрактные классы и методы в C#: практическое руководство
- Частичные классы и методы в C#: понимание и применение
- Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
- Мастерство файловых операций в Java с java.io: создание, чтение, запись и удаление
- Операторы в C++: типы, примеры и практические программы
- C++ Struct vs Class: ключевые отличия, синтаксис и лучшие сценарии использования
- Абстрактные классы в C#: практическое руководство с примерами кода
- Чтение файлов в Java с BufferedReader — Практическое руководство с примерами
- Понимание type() и isinstance() в Python: практические примеры