Иллюстрированный самоучитель по VB.NET

       

Простая сериализация


Простая сериализация

Прежде всего импортируйте пространство имен System.Runtime.Serialization, это сэкономит немало времени на вводе имен. В типичной ситуации поддержка сериализации включается простым добавлением атрибута в заголовок класса:

<Serializable()>Public Class Employee

Атрибут <Serial izable( )> должен быть установлен и во всех классах, производных от вашего класса, а также во всех вложенных классах, объекты которых содержатся в исходном классе. В противном случае рекурсивный процесс будет нарушен с исключением System.Runtime.Serialization.Serial izationException.

В .NET Framework сериализация поддерживается в классах, реализующих интерфейс ISerializable.

После пометки класса атрибутом <Serial izableC )> следует решить, в каком формате должен сохраняться объект — в XML-формате SOAP или в более компактном двоичном формате. Используемый по умолчанию двоичный формат доступен всегда. Чтобы воспользоваться форматом SOAP, необходимо добавить ссылку на сборку System. Runti me. Sena1izati on. Formatters. Soap.

Следующий пример показывает, как организовать сериализацию для массива. Массив ArrayList является объектом и может содержать другие объекты (в нашем примере это объекты иерархии Employee). Поскольку динамические массивы сери-ализуются автоматически, остается лишь пометить атрибутом <Serializabl е( )> различные классы иерархии Empl oyee. Вся содержательная работа выполняется в двух выделенных строках:

Sub SerializeToBinary(ByVal myEmployees As ArrayList._

ByVal fName As String)

Dim fStream As FileStream

Dim myBinaryFormatter As New Formatters.Binary.BinaryFormatter()



Try

fStream = New FileStreamtfName,FileMode.Create, FileAccess.Write)

myBinaryFormatter.Serialize(fStream, myEmployees)

Catch e As Exception

Throw e Finally

If Not (fStream Is Nothing) Then fStream.Close()

End Try

End Sub

Чтобы вместо двоичного формата массив сохранялся в формате SOAP, достаточно включить в проект ссылку на сборку System.Runtime.Serialization.Formatters.Soap (это делается в диалоговом окне Project > References) и привести выделенные строки к следующему виду:

Dim mySoapFormatter As New Formatters.Soap.SoapFormatter()

и

mySoapFormatter.Serialize(fStream. myEmployees)

На рис. 9.4 показано, как выглядит полученный файл в формате SOAP.

Отдельные поля класса можно пометить атрибутом <NonSerialized()>. Состояние этих полей не сохраняется в процессе сериализации.



Содержание раздела