Разработка распределенных приложений в Microsoft.NET Framework


Классы сериализации SoapFormatter и BinaryFormatter


Класс сериализации System.Runtime.Serialization.Formatters.Soap.SoapFormatter используется исключительно в среде .NET Remoting, а класс System.Runtime.Serialization.Formatters.Binary.BinaryFormatter может также использоваться в среде MSMQ вместо XMLSerializer. Оба класса форматирования по приведенной классификации являются универсальными. Класс форматирования BinaryFormatter реализует двоичный закрытый метод сериализации, класс SoapFormatter – текстовый и открытый, основанный на спецификации кодирования SOAP-RPC (пространство имен http://schemas.xmlsoap.org/soap/encoding/).

При разработке .NET Framework 2.0 разработчики по некоторым данным собирались придать классу SoapFormatter статус устаревшего. Класс SoapFormatter не поддерживает одно из важных нововведений – параметризированные типы данных (generic types).

Оба указанных класса в простейшем случае при сериализации сохраняют все поля класса (но не его свойства), вне зависимости от их видимости. Поля, имеющие атрибут System.NonSerializeAttribute, игнорируются. Класс должен иметь атрибут System.SerializableAttribute. В ходе сериализации класса форматирования используют методы класса System.Runtime.Serialization.FormatterServices. Сериализуемый класс должен содержать конструктор без параметров, который вызывается при создании нового объекта в ходе десериализации.

Если же обрабатываемый класс реализует интерфейс ISerializable, то он сериализуется вызовом метода GetObjectData(SerializationInfo info, StreamingContext context) этого интерфейса, внутри которого обычно так же вызываются методы FormatterServices. Десериализация таких классов осуществляется вызовом конструктора ISerializable(SerializationInfo info, StreamingContext context), заполняющего поля объекта значениями из info.

О завершении своей десериализации объект может получить уведомление, реализовав интерфейс System.Runtime.Serialization.IDeserializationCallback с единственным методом OnDeserialization.

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


Начало  Назад  Вперед



Книжный магазин