Настройка параметров сериализации с помощью ISerializable

Настройка параметров сериализации с помощью ISerializable

Объекты, обозначаемые атрибутом [Serializable], имеют возможность реализовать интерфейс ISerializable. В этом случае вы можете "участвовать" в процессе сериализации, выполняя любое предварительное или последующее форматирование данных. Указанный интерфейс очень прост, поскольку он определяет единственный метод, GetObjectData().

// Для настройки процесса сериализации реализуйте ISerializable.

public interface ISerializable {

 void GetObjectData(SerializationInfo info, StreamingContext context);

}

Метод GetObjectData() вызывается форматтером в процессе сериализации автоматически. Реализация этого метода предоставляет через входной параметр SerializationInfo серию пар имен и значений, которые (обычно) соответствуют полям данных того объекта, который следует сохранить. Тип SerializationInfo определяет перегруженный метод AddValue(), имеющий множество вариаций, а также небольшой набор свойств, которые позволяют читать и устанавливать имя типа, имя определяющего компоновочного блока и значение счетчика членов. Вот фрагмент соответствующего программного кода.

public sealed class SerializationInfo: object {

 public SerializationInfo(Type type, IFormatterConverter converter);

 public string AssemblyName { get; set; }

 public string FullTypeName { get; set; }

 public int MemberCount { get; }

 public void AddValue(string name, short value);

 public void AddValue(string name, UInt16 value);

 public void AddValue(string name, int value);

 …

}

Типы, реализующие интерфейс ISerializable, должны также определять специальный конструктор в соответствии со следующим шаблоном.

// Следует предложить пользовательский конструктор следующего вида,

// чтобы среда выполнения могла установить состояние вашего объекта.

[Serializable]

class SomeClass: ISerializable {

 private SomeClass(SerializationInfo si, StreamingContext ctx) {…}

 …

}

Обратите внимание на то, что для области видимости этого конструктора указано private. Это вполне допустимо, поскольку форматтер получает доступ к этому члену независимо от его видимости. Эти специальные конструкторы чаще всего обозначаются как приватные, чтобы обеспечить невозможность случайного создания объекта пользователем объекта с помощью такого конструктора. Заметьте, что первый параметр этого конструктора является (как и ранее) экземпляром типа SerializationInfo.

Второй параметр этого специального конструктора является типом StreamingContext, содержащим информацию об источнике или пункте назначения битов. Самым информативным членом этого типа является свойство State, которое представляет значение из перечня StreamingContextStates. Значения этого перечня соответствуют базовой композиции текущего потока.

Честно говоря, если вашей задачей разработки не является низкоуровневый пользовательский сервис удаленного доступа, вам вряд ли придется обращаться к указанному перечню непосредственно. Тем не менее, ниже приводятся имена элементов перечня StreamingContextStates (подробности его описания можно найти в документации .NET Framework 2.0 SDK).

public enum StreamingContextStates {

 CrossProcess,

 CrossMachine,

 File,

 Persistence,

 Remoting,

 Other,

 Clone,

 CrossAppDomain,

 All

}

Чтобы иллюстрировать возможности настройки процесса сериализации с помощью ISerializable, предположим, что у нас есть тип класса, который определяет два элемента строковых данных. Кроме того, предположим, что все символы этих строк должны сохраняться в поток в верхнем регистре, а восстанавливаться из потока – в нижнем. Чтобы учесть эти требования, вы можете реализовать ISerializable так. как показано ниже (не забудьте указать using для пространства имен System.Runtime.Serialization).

[Seriаlizable]

class MyStringData: ISerializable {

 public string dataItemOne, dataItemTwo;

 public MyStringData() {}

 private MyStringData(SerializationInfo si, StreamingContext ctx) {

  // Регидратация члена из потока.

  dataItemOne = si.GetString(First_Item").ToLower();

  dataItemTwo = si.GetString("dataItemTwo").ToLower();

 }

 void ISerializable.GetObjectData(SerializatianInfo info, StreamingContext ctx) {

  // Наполнение объекта SerializationInfo

  // форматированными данными.

  info.AddValue("First_Item", dataItemOne.ToUpper());

  info.AddValue("dataItemTwo", dataItemTwo.ToUpper());

 }

}

Обратите внимание на то, что при "наполнении" типа SerializationInfo в методе GetObjectData() не требуется, чтобы элементы данных назывались одинаково с внутренними членами-переменными типа. Это может оказаться полезным тогда, когда нужно выделять данные из сохраненного формата. При этом не следует забывать о том, что для получения значений из приватного конструктора необходимо использовать имена, которые назначаются в рамках GetObjectData().

Чтобы проверить пользовательские настройки, предположим, что вы сохранили экземпляр MyStringData с помощью SoapFormatter. Заглянув в результирующий файл *.soap, вы увидите, что строковые поля в нем действительно представлены в верхнем регистре.

‹SOAP-ENV:Envelope xmlns:xsi="…"›

 ‹SOAP-ENV:Body›

  ‹a1:MyStringData id="ref-1" xmlns:a1="…"›

   ‹First_Item id="ref-3"›ЭTO НЕКОТОРЫЕ ДАННЫЕ.‹/First_Item›

   ‹dataItemTwo id="ref-4"›ЭTO НЕКОТОРЫЕ ДОПОЛНИТЕЛЬНЫЕ ДАННЫЕ‹/dataItemTwo›

  ‹/a1:MyStringData›

 ‹/SOAP-ENV:Body›

‹/SOAP-ENV:Envelope›

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Настройка параметров ICQ

Из книги Мир общения: ICQ автора Леонтьев Виталий Петрович

Настройка параметров ICQ Щелкнув по кнопке ICQ Menu в левом нижнем углу окна и выбрав пункт Preferences, вы получите доступ к настройкам программы. Установка параметров ICQ – меню PreferencesУспокою вас – настраивать придется не слишком долго. Главное – не забудьте настроить вкладку Check


Настройка процесса сериализации

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Настройка процесса сериализации В большинстве случаев типовая схема сериализации, предлагаемая платформой .NET, будет именно тем, что требуется. Тогда нужно просто применить атрибут [Serializable] и передать объектный граф выбранному средству форматирования. Но в некоторых


Настройка параметров сериализации с помощью атрибутов

Из книги Office 2007. Мультимедийный курс автора Мединов Олег

Настройка параметров сериализации с помощью атрибутов Хотя реализация интерфейса ISerializable в .NET 2.0 все еще допустима, для настройки процесса сериализации теперь более предпочтительным считается определение методов, наделенных одним из целого ряда новых атрибутов,


Настройка параметров

Из книги ArchiCAD. Начали! автора Орлов Андрей Александрович

Настройка параметров Для перехода в режим настройки параметров программы выполните команду главного меню Сервис ? Параметры. Открывшееся окно состоит из нескольких вкладок, на которых находятся однотипные, сходные по назначению и функциональности параметры настройки


Настройка параметров крыш

Из книги Новейший самоучитель работы на компьютере автора Белунцов Валерий

Настройка параметров крыш В разделе Geometry and Positioning (Форма и расположение) отсутствует поле для ввода высоты объекта, поскольку высота ската крыши будет определяться его уклоном. Уклон ската устанавливается в поле Roof Slant Angle (Угол уклона ската), расположенном в правой


Настройка параметров двери

Из книги OrCAD PSpice. Анализ электрических цепей автора Кеоун Дж.

Настройка параметров двери Нажатие кнопки откроет окно Door Default Settings (Настройки параметров двери по умолчанию) (рис. 6.5).Не стоит пугаться обилия параметров. Их большое количество говорит о возможности воплотить в жизнь практически любую фантазию. Рассмотрим настройку


Настройка параметров лестниц

Из книги AutoCAD 2009. Учебный курс автора Соколова Татьяна Юрьевна

Настройка параметров лестниц Окно Stair Default Settings (Настройки параметров лестниц по умолчанию) (рис. 6.12) открывается нажатием кнопки Рис. 6.12. Окно настройки параметров лестницВ разделе Preview and Positioning (Просмотр и расположение) расположены следующие параметры:? кнопки


Настройка параметров записи

Из книги AutoCAD 2008 для студента: популярный самоучитель автора Соколова Татьяна Юрьевна

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


Анализ с помощью h -параметров

Из книги 1С: Бухгалтерия 8.2. Понятный самоучитель для начинающих автора Гладкий Алексей Анатольевич

Анализ с помощью h-параметров Схема на рис. 10.13 рассматривается относительно переменных составляющих. Узел источника VCC заземляется (при этом R1 подсоединяется параллельно R2), конденсатор С1 закорачивается. Преобразованная таким образом схема показана на рис. 10.17, а при


Настройка системных параметров

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Настройка системных параметров Для настройки системных параметров AutoCAD используется вкладка System диалогового окна Options – рис. 3.11. Рис. 3.11. Диалоговое окно настройки системных параметров• В области 3D Perfomance определяется производительность трехмерной графики. Кнопка


Настройка системных параметров

Из книги iOS. Приемы программирования автора Нахавандипур Вандад

Настройка системных параметров Для настройки системных параметров AutoCAD используется вкладка System диалогового окна Options – рис. 3.8. Рис. 3.8. Диалоговое окно настройки системных параметров• В области 3D Perfomance определяется производительность трехмерной графики. Кнопка


Настройка параметров

Из книги Установка, настройка и восстановление Windows 7 на 100% автора Ватаманюк Александр Иванович


Оптимизация оболочки с помощью параметров реестра

Из книги Социальные сети. ВКонтакте, Facebook и другие… автора Леонтьев Виталий Петрович

Оптимизация оболочки с помощью параметров реестра Рассмотрим также несколько параметров реестра, влияющих на оптимизацию оболочки, но не имеющих способа изменения с помощью стандартных диалогов Windows.? MenuShowDelay — данный параметр строкового типа уже был рассмотрен ранее


1.8. Группирование компактных параметров с помощью UISegmentedControl

Из книги автора

1.8. Группирование компактных параметров с помощью UISegmentedControl Постановка задачи Требуется предложить пользователям на выбор несколько параметров, из которых они могут выбирать. Пользовательский интерфейс должен оставаться компактным, простым и легким для


14.3. Настройка параметров

Из книги автора

14.3. Настройка параметров Программа Защитник Windows имеет достаточно много параметров, с помощью которых можно настраивать, в частности, ее реакцию на те или иные события. Например, с помощью параметров можно задать плановое сканирование компьютера.Чтобы получить доступ к


Настройка параметров QIP

Из книги автора

Настройка параметров QIP xxx: да блин, я как только аську открою, тут же завалят новостями xxx: как раньше без нее жили? yyy: 21-й век yyy: раньше голубей отсылали yyy: открываешь дома окно – и фигак – все окно засрано и куча новостей yyy: ну, то есть тоже самое, только не так оперативно Ну