Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Троелсен Э. -> "С# и платформа .NET. Библиотека программиста" -> 221

С# и платформа .NET. Библиотека программиста - Троелсен Э.

Троелсен Э. С# и платформа .NET. Библиотека программиста — СПб.: Питер, 2004. — 796 c.
ISBN 5-318-00750-3
Скачать (прямая ссылка): cplatforma2004.pdf
Предыдущая << 1 .. 215 216 217 218 219 220 < 221 > 222 223 224 225 226 227 .. 320 >> Следующая

ное, что нам потребуется для сериализации при помощи объекта Formatter, - определить использование этого пространства имен:
// Для сериализации объектов в двоичной формате
LJSi ng System. Runt і me. Seri al і zat і on. Formatters. Bi па ry:
Класс SoapFormatter определен в отдельной сборке, поэтому для объекта в формате SOAP вам вначале потребуется добавить ссылку на сборку
System.Runtime.Serializaton.Formatters.Soap.dll, а затемиснодьзовать аналогичную команду:
// Для сериализации объектов в формате SOAP
using System.Runtime.Serialization.Formatters.Soap:
Пространство имен System.Runtime.Serialization
Если нас не устроит ни сериализация в двоичном формате, ни сериализации в формате SOAP, мы можем принять решение о создании своего собственного формата сериализации (и соответствующего ему объекта Formatter). Для этой цели нам пригодятся классы из пространства имен Systerc.Runtiine. Serial 1zat1 on. Кроме того, при
настройке наших объектов для сериализации каким-либо специальным способом
нам также пригодятся типы из этого пространства имен. Созданием своего собственного формата сериализации и объекта Formatter мы сейчас заниматься не будем, но типы, которые могут для этого пригодиться, все-таки приведем (табл. IM/:).
550 Глава 11 • Ввод, вывод и сериаяизаии* объектов
FUo 1121. Процесс сериализации
Сериализация в двоичном формате
Сериализация объектов в двоичном формате производится при помощи типа Bi -naryFormatter, который определен в пространстве имен System.Runtime.Serial і -zation. Formatters. Bi nary (а в физическом отношении - в библиотеке mscorlib.dll). Для записи объекта в место хранения и восстановления объекта по сохраненной информации используются два главных метода этого класса (табл.
Таблица 11.16 Методы класса Binary Formatter Метод Описание
Deserializer) Десериализует поток байтов в объект
Serialize^) Сериа/тизует объект (или граф из взаимосвязанных объектов) в поток
Кроме этих типов, в пространстве имен System.Runtime.Serializatior определены также два интерфейса: IFormatter и ISerializable (этот интерфейс будет подробнее рассмотрен ниже).
Вне зависимости от того, каким объектом Formatter мы будем пользоваться (пусть это будет даже специальный, созданный нами Formatter), главная его задача будет одной и той же — передавать всю информацию о состоянии объекта в процессе сериализации в место постоянного хранения, используя при этом какой-либо формат для ее записи. Эта информация обязательно должна включать в себя полное имя класса объекта (например, MyProject.MyCl asses. Foo), имя сборки, содержащей в себе данный класс (дружественное имя, номер версии и, возможно, «сильное имя» сборки), а также необходимые сведения о состоянии объекта, для хранения которых используется объект SeriaTizationlnfo.
Объект FormatterynacTByeT и в процесседесериализации: ониспользуетинфор-мацию из постоянного места хранения (точнее, из потока) для воссоздания точной копии сериализованного объекта. Общая схема этого процесса представлена нарис. 11.21.
Сериализация в двоичном формате 5!>1
Кроме того, тип BinaryFormatter определяет набор свойств для уточнения некоторых особенностей процессов сериализации и десериализации. Однако в большинстве случаев эти свойства совершенно не нужны.
Давайте сериалиэуеи наш шпионский автомобиль в двоичном формате (точнее, в файл CarData.dat). Выглядеть этот процесс может следующим образом:
using Systen.Runtime.Serialiгаtion - Formatters Binary:
public static void HainO {
II Создаем объект JamesBondCar и выполняем с ним всякие действия JamesBondCar myAuto = new JamesBondCarfFred". 50, false, true): myAuto.TurnOnRadiо(true): myAuto. GoUnderUaterf.):
Il Создаем поток для записи в файл
FileStream nvyStream - Fl le.Createt "CarOata .dat"):
Il Помещаем объектный граф в поток в двоичном формате BinaryFomatter myBinaryFormat - new BinaryFormatterO: myВі naryFormat.Serialize<myStream, myAuto): myStream.Closet):
;
Как видно из примера, все действия по созданию объектного графа и перемещению последовательности байтов в поток производятся при помощи единственного метода - Bi naryFormatter.Serialized. В нашем случае мы сериализовали объект в файл на диске. Однако мы точно так же можем сериализовать файл в любой другой поток (то есть объект класса, производного от Stream), например в оперативную память. Полученную последовательность байтов можно увидеть, если открыть файл CarData.dat в Visual Studio (рис. 11.22).
*.. bin ¦DebugU urt)d1>»,ii*t
FF FF 01 00 00 00 00 00 00
43 61 72 54 6F 46 69 6C 65 ......ICarToFiIe
72 ¦ 69 6F 6E 3D 31 2E 30 App, Version-1.0
33 39 36 2C 20 43 75 6C 74 .462.34396. Cult
74 72 61 6C 2C 20 50 75 62 ure-neutral. Pub
¦ 6В 65 6E 3D 6E 75 6C 6C 1icKeyToken-nu11
61 72 54 6F 46 69 6C 65 41 ......Car ToF UeA
73 42 6F 6E 64 43 61 72 08 pp.JamesBondCar.
6C 69 67 68 74 57 6F 72 74 ....isFlightHort
61 6F 72 74 68 79 07 70 hy.isSeaVorthy.p
6D 61 78 70 65 65 64 08 etllane . maxSpeed .
6F OB 43 61 72 ¦ 70 65 74 theRadio.Car+pet
72 2B 6D 61 76 70 65 65 Halte. Car+»axSpee
Предыдущая << 1 .. 215 216 217 218 219 220 < 221 > 222 223 224 225 226 227 .. 320 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100