Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Сериализация объектов с помощью SoapFormatter
Сериализация объектов с помощью SoapFormatter
Следующим вариантом является тип SoapFormatter. Тип SoapFormatter сохраняет объектный граф в сообщении SOAP (Simple Object Access Protocol – простой протокол доступа к объектам), что делает этот вариант форматирования прекрасным выбором при передаче объектов средствами удаленного взаимодействия по протоколу HTTP. Если вы не знакомы со спецификациями SOAP, не волнуйтесь. В сущности, SOAP определяет стандартный процесс, с помощью которого можно вызывать методы не зависящим от платформы и ОС способом (мы рассмотрим SOAP чуть более подробно в последней главе этой книги при обсуждении Web-сервисов XML).
В предположении о том, что вы установили ссылку на компоновочный блок System.Runtime.Serialization.Formatters.Soap.dll, можно реализовать сохранение и восстановление JamesBondCar в формате сообщения SOAP с помощью замены BinaryFormatter на SoapFormatter. Рассмотрите следующий программный код, который выполняет сериализацию объекта в локальный файл с именем CarData.soap.
using System.Runtime.Serialization.Formatters.Soap;
…
static void Main(string[] args) {
…
// Сохранение объекта в файл CarData.soap в формате SOAP.
SoapFormatter soapFormat = new SoapFormatter();
fStream = new FileStream("CarData.soap", FileMode.Create, FileAccess.Write, FileShare.None);
soapFormat.Serialize(fStream, jbc);
fStream.Close();
Console.ReadLine();
}
Как и ранее, здесь просто используются Serialize() и Deserialize() для перемещения объектного графа в поток и восстановления его из потока. Если открыть полученный файл *.soap, вы увидите в нем элементы XML, представляющие значения JamesBondCar и взаимосвязи между объектами графа (с помощью лексем #ref). Рассмотрите следующий фрагмент XML-кода, соответствующий конечному результату (для краткости здесь опущены указания на пространства имен XML).
‹SOAP-ENV:Envelope xmlns:xsi="…"›
‹SOAP-ENV:Body›
‹a1:JamesBondCar xmlns:a1="…"›
‹canFly›true‹/canFly›
‹canSubmerge›false‹/canSubmerge›
‹theRadio href="#ref-3"/›
‹isHatchBack›false‹/isHatchBack›
‹/a1:JamesBondCar›
‹a1:Radio xmlns:a1="…"›
‹hasTweeters›true‹/hasTweeters›
‹hasSubWoofers›false‹/hasSubWoofers›
‹stationPresets href="ref-4"/›
‹/a1:Radio›
‹SOAP-ENC:Array SOAP-ENC:arrayType="xsd:dooble[3]"›
‹item›89.3‹/item›
‹item›105.1‹/item›
‹item›97.1‹/item›
‹/SOAP-ENC:Array›
‹/SOAP-ENV:Body›
‹/SOAP-ENV:Envelope›
- Основы сериализации объектов
- Конфигурирование объектов для сериализации
- Выбор формата сериализации
- Сериализация объектов с помощью BinaryFormatter
- Сериализация объектов с помощью SoapFormatter
- Сериализация объектов с помощью XmlSerializer
- Сохранение коллекций объектов
- Настройка процесса сериализации
- Поддержка версий сериализации объектов
- Резюме
- ГЛАВА 17. Сериализация объектов
- Сериализация объектов с помощью BinaryFormatter
- Сохранение коллекций объектов
- Повышение производительности приложений с помощью хранимых процедур
- Тестирование Web-сервиса XML с помощью WebDev.WebServer.exe
- Организация пользователей в группы с помощью ролей
- Иерархия объектов в InterBase
- Имена объектов длиной 68 символов
- Создание объектов Collection
- 3.3. Определение объектов защиты
- Обработка запросов с помощью PHP
- Как с помощью компьютера подшутить над друзьями и коллегами?