Сохранение объекта в двоичный файл с помощью сериализации

При работе программ довольно часто возникает необходимость сохранения тех или иных данных. Один из возможных вариантов сохранения – запись информации в двоичный файл.

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

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

Чтобы объект можно было сериализовать его класс должен быть обязательно отмечен атрибутом [Serializable].

В качестве примера рассмотрим простой класс, который описывает автомобиль. В классе имеются только два свойства, которые инициализируются в конструкторе при создании объекта: марка автомобиля (CarBrand) и его максимальная скорость (MaxSpeed). Исходный код класса приведён ниже.

[Serializable]
class Car
{
   public string CarBrand { get ;set;}
   public int MaxSpeed { get; set; }
   public Car(string brand,int maxspeed)
   {
        CarBrand = brand;
        MaxSpeed = maxspeed;
   }
}

 

Создадим объект класса Car, который хранит сведения о некотором автомобиле.

Car c = new Car("Ferrari", 200);

Сериализация в поток байт производится с помощью класса BinaryFormatter.

Чтобы сохранить созданный объект файл необходимо создать файловый поток с помощью класса FileStream для записи файла и выполнить сериализацию объекта в этот поток с помощью метода Serialize класса BinaryFormatter.

BinaryFormatter binFormat = new BinaryFormatter();
using (Stream fStream = new FileStream("Car.dat", FileMode.Create, FileAccess.Write, FileShare.None))
{
    binFormat.Serialize(fStream, c);
}

В результате в папке с исполняемым файлом программы будет создан файл Car.dat, который содержит в себе созданный ранее объект класса Car.

При необходимости этот объект также может быть легко восстановлен.

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

Для этого нужно создать поток для чтения файла и воспользоваться методом Deserialize. Так как данный метод возвращает Object необходимо приведение типов.

Стоит отметить, что как сериализация так и десериализация сами по себе достаточно сложные и трудоёмкие процессы. Но, благодаря наличию в .NET Framework уже готовых инструментов, которые их реализуют, выполнение этих процессов при разработке .NET приложений не составляет особого труда.

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

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