День сто пятьдесят четвёртый. #ЗаметкиНаПолях
Сериализация. Начало
Сериализация - это процесс преобразования объекта в поток байтов для хранения его в памяти, базе данных или файле. Основная цель - сохранить состояние объекта, чтобы иметь возможность воссоздать его при необходимости. Обратный процесс называется десериализацией.
Объект сериализуется в поток, который переносит не только данные, но и информацию о типе объекта, например его версию, имя сборки и языковые стандарты. Из этого потока он может быть сохранен в базе данных, файле или памяти.
Примеры использования:
- отправка объекта в удаленное приложение с помощью веб-службы,
- передача объекта из одного домена в другой,
- передача объекта через брандмауэр в виде строки XML,
- поддержание безопасности при передаче пользовательских данных между приложениями,
- сохранение набора объектов (например, состояние приложения) в качестве «резервной копии»,
- глубокое копирование объектов (об этом позже).
Чтобы сериализовать объект, вам нужен сериализуемый объект, поток, содержащий сериализованный объект, и средство форматирования.
Примените атрибут
Если сериализованный класс содержит ссылки на объекты других классов, помеченные атрибутом
Пример
Метод
Продолжение следует…
Источники:
- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 24.
- https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/serialization/
Сериализация. Начало
Сериализация - это процесс преобразования объекта в поток байтов для хранения его в памяти, базе данных или файле. Основная цель - сохранить состояние объекта, чтобы иметь возможность воссоздать его при необходимости. Обратный процесс называется десериализацией.
Объект сериализуется в поток, который переносит не только данные, но и информацию о типе объекта, например его версию, имя сборки и языковые стандарты. Из этого потока он может быть сохранен в базе данных, файле или памяти.
Примеры использования:
- отправка объекта в удаленное приложение с помощью веб-службы,
- передача объекта из одного домена в другой,
- передача объекта через брандмауэр в виде строки XML,
- поддержание безопасности при передаче пользовательских данных между приложениями,
- сохранение набора объектов (например, состояние приложения) в качестве «резервной копии»,
- глубокое копирование объектов (об этом позже).
Чтобы сериализовать объект, вам нужен сериализуемый объект, поток, содержащий сериализованный объект, и средство форматирования.
System.Runtime.Serialization
содержит классы, необходимые для сериализации и десериализации объектов.Примените атрибут
Serializable
к типу, чтобы указать, что экземпляры этого типа могут быть сериализованы. При попытке сериализовать объект, не помеченный атрибутом Serializable
, выбрасывается исключение. Атрибут Serializable не наследуется производными типами.Если сериализованный класс содержит ссылки на объекты других классов, помеченные атрибутом
Serializable
, эти объекты также будут сериализованы.Пример
public static void Main()Метод
{
var objects = new List<string> { "Jeff", "Kristin", "Grant" };
var stream = SerializeToMemory(objects);
stream.Position = 0;
var deserialized = (List<string>)DeserializeFromMemory(stream);
foreach (var s in deserialized)
Console.WriteLine(s);
}
private static Stream SerializeToMemory(object objects)
{
var stream = new MemoryStream();
new BinaryFormatter().Serialize(stream, objects);
return stream;
}
private static object DeserializeFromMemory(Stream stream)
{
return new BinaryFormatter().Deserialize(stream);
}
SerializeToMemory
создаёт объект System.IO.MemoryStream
, чтобы разместить поток сериализованных данных в памяти. Затем используется объект BinaryFormatter
из пространства имён System.Runtime.Serialization.Formatters.Binary
. Этот объект, реализующий интерфейс IFormatter, «умеет» сериализовывать объекты в поток байтов и десериализовывать их из него.Метод
DeserializeFromMemory
использует тот же поток данных из памяти, чтобы выполнить обратные действия.Продолжение следует…
Источники:
- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 24.
- https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/concepts/serialization/