Программирование >>  Программирование с использованием ajax 

1 ... 316 317 318 [ 319 ] 320 321 322 ... 396


[NonSerializedO ]

public int weight;

public int WeightlnPounds {

get {

return weight;

set {

weight = value;

При сериализации этого класса только член Age будет сохранен - член WeightlnPounds сохранен не будет и, следовательно, не будет извлекаться во время десериализации.

Десериализация - по существу процесс, противоположный представленному приведенным кодом сериализации. Следующий пример открывает поток для созданного ранее файла Me. dat, конструирует метод BinaryFormatter для чтения объекта и вызывает метод Deserialize для извлечения этого объекта. Затем он отображает его в объекте Person и выводит возраст и вес данного лица на консоль:

public static void DeSerialize () {

Открытие файла.

Stream s = File.Open ( Me.dat , FileMode.Open);

И использование BinaryFormatted для считывания объекта (объектов) из потока. BinaryFormatter bf = new BinaryFormatter ();

Десериализация объекта, object о = bf.Deserialize (s) ;

Обеспечение правильности типа объекта... Person р = о as Person;

if (р != null)

Console.WriteLine ( DeSerialized Person aged: {0} weight: {!} , p.Age , p.WeightlnPounds);

Закрытие потока, s.Close 0;

Как правило, атрибут NonSerialized применяют для пометки данных, которые не нужно подвергать сериализации, таких как пересчитываемые или вычисляемые при необходимости. Примером служит класс, который вычисляет простые числа - для ускорения отклика при использовании класса вполне можно кэшировать простые числа, но сериализация и десериализация простых чисел не обязательна, поскольку их можно просто вычислить заново по запросу. В других ситуациях член может иметь значение только для конкретного применения объекта. Например, в объекте, представляющем документ текстового процессора, обычно требуется выполнять сериализацию содержимого документа, но не позиции точки вставки - при последующих загрузках точка вставки просто помещается в начало документа.



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

System. Reflection. AssemblyDelaySignAttribute

Пространство имен System. Ref lection предоставляет ряд атрибутов, часть из которых рассматривались ранее в этой главе. Один из наиболее сложных для использования атрибутов - AssemblyDelaySign, который позволяет откладывать подписание сборки, чтобы ее можно было регистрировать в глобальном кэше сборок (Global Assembly Cache - GAC) для тестирования без секретного ключа.

Одна из ситуаций, когда может требоваться отложенное подписание - разработка коммерческой программы. Каждая сборка, разработанная внутри компании, перед поставкой клиентам должна быть подписана секретным ключом этой компании - это предоставляет клиентам определенную гарантию, что сборка действительно было создана данной компанией. При компиляции сборки, прежде чем ее можно будет зарегистрировать в GAC, нужно указать ссылку на файл ключа. Этот файл содержит два ключа - открытый и секретный.

Однако многие организации не желают, чтобы их секретный ключ хранился на компьютере каждого разработчика. Поэтому модуль времени выполнения позволяет выполнять частичное подписание сборки и изменять несколько настроек, чтобы сборку можно было регистрировать внутри GAC. После того, как сборка будет полностью протестировала, она может быть окончательно подписана держателем файла секретного ключа. Им может быть отдел контроля качества, одно или более доверенных лиц или отдел маркетинга.

В следующем практическом занятии показано, как отложить подписание типичной сборки, зарегистрировать ее в GAC для выполнения тестирования и, наконец, окончательно подписать, добавляя секретный ключ.

Отложенное подписание

с помощью утилиты sn. ехе создайте файл ключа. Если вы используете Express-версию Visual Studio, придется загрузить также комплект средств разработки .NET Framework 2.0 SDK, включающий в себя эту утилиту. Файл ключа будет содержать открытый и секретный ключи и, как правило, будет назван по названию компании. По принятому соглашению файлам ключей присваивается расширение .snk:

> sn -к Company, snk

с помощью опции -р извлеките часть открытого ключа, которая будет использоваться разработчиками:

> sn -р Company.snk CompanyPublic.snk

Эта команда создает файл ключа CompanyPublic. snk, содержащий только открытую часть ключа. Этот файл открытого ключа может быть скопирован на все компьютеры и не нуждается в особой защите - в тайне нужно хранить только файл секретного ключа. Сохраните файл Company. snk в каком-то надежном месте, поскольку он потребуется только для окончательного подписания сборок.



3. Чтобы выполнить отложенное подписание и зарегистрировать сборку внутри GAC, необходимо также получить маркер открытого ключа - по сути, он представляет собой сокращенную версию открытого ключа, используемую при регистрации сборок. Маркер можно получить двумя способами:

из самого файла открытого ключа:

> sn -tCompanyPublic. snk

из сборки, подписанной файлом ключа CompanyPublic. snk:

> sn -Т < assembly >

Оба эти метода отображают хешированную версию открытого ключа и зависят от регистра. Подробнее мы рассмотрим этот вопрос при регистрации сборки. Файл ключа, хранящийся в каталоге Chapter30/06 DelaySign этой главы, создает значение маркера открытого ключа aladla5619382d41. Это значение потребуется позднее в этой главе и на вашем компьютере оно будет иным в случае создания нового файла ключа.

Отложенное подписание сборки

Следующий код демонстрирует пометку сборки для отложенного подписания. Он доступен в каталоге Chapter30/06 DelaySign:

using System;

using System.Reflection;

Определение файла, содержащего открытый ключ, [assembly: AssemblyKeyFile ( CompanyPublic.snk ) ]

И указание того, что эта сборка предназначена для отложенного подписания, [assembly: AssemblyDelaySign (true) ] public class DelayedSigning {

public DelayedSigning ()

Атрибут AssemblyKeyFile определяет файл, в котором нужно искать ключ. Он может быть файлом открытого ключа или, для наиболее доверенных лиц, файлом, содержащим и открытый, и секретный ключи. Атрибут AssemblyDelaySign определяет, подписана ли сборка полностью (false) или ее подписание отложено (true). Обратите внимание, что в среде Visual Studio 2008 файл ключа и опцию отложенного подписания можно устанавливать из интерфейса пользователя, как показано на рис. 30.7 - эти опции являются составной частью окна Properties проекта.

S.gn.ng S cunt> PubUsh Code Ап* уя1

J Sign the Msembl> Choose a Uiong name key Ш . companypMblifcjnic

✓ DeUyngnonly

ЛНеп delay signed, the project Mill no* run or be debuggable

Puc. 30.7. Установка отложенного подписания сборки



1 ... 316 317 318 [ 319 ] 320 321 322 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика