Все о сериализации в Visual Basic

Сериализация - это процесс преобразования объекта в линейную последовательность байтов называется «поток байтов». Десериализация просто полностью меняет процесс. Но почему вы хотите преобразовать объект в поток байтов?

Основная причина в том, что вы можете перемещать объект. Рассмотрим возможности. Поскольку в .NET «все является объектом», вы можете сериализовать что угодно и сохранить его в файл. Таким образом, вы можете сериализовать изображения, файлы данных, текущее состояние программного модуля («состояние» похоже на снимок вашей программы в определенный момент времени, чтобы вы могли временно приостановить выполнение и начать заново потом)... все, что вам нужно сделать.

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

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

instagram viewer
ISerializable интерфейс и кодирование новый и GetObjectDataподпрограмма.

В качестве первого примера сериализации давайте создадим одну из самых простых программ, но также и одну из самых полезных: сериализацию данных, а затем десериализацию данных простым классом в файл и из файла. В этом примере данные не только сериализуются, но и сохраняется структура данных. Структура здесь объявлена ​​в модуле для хранения вещей... Что ж... структурированы.

Модуль SerializeParms
Открытый класс ParmExample
Public Parm1Name As String = "Имя Parm1"
Public Parm1Value As Integer = 12345
Публичный Parm2Name As String
Public Parm2Value как десятичное
Конечный класс
Конечный модуль

Затем отдельные значения могут быть сохранены в файл следующим образом:

Система импорта. Продолжительность. Сериализация. Форматтеры. двоичный
Система импорта. IO
Открытый класс Form1
Частный Sub mySerialize_Click (_
ByVal отправитель как система. Объект, _
ByVal e As System. EventArgs) _
Ручки mySerialize. щелчок
Dim ParmData как новый пример ParmExample
ParmData. Parm2Name = "Имя Parm2"
ParmData. Parm2Value = 54321.12345
Dim s As New FileStream ("ParmInfo", FileMode. Создайте)
Dim F As New BinaryFormatter
е. Сериализация (s, ParmData)
s. Близко()
End Sub
Конечный класс

И те же самые значения могут быть получены следующим образом:

Система импорта. Продолжительность. Сериализация. Форматтеры. двоичный
Система импорта. IO
Открытый класс Form1
Частный Sub myDeserialize_Click (_
ByVal отправитель как система. Объект, _
ByVal e As System. EventArgs) _
Ручки myDeserialize. щелчок
Dim s = New FileStream ("ParmInfo", FileMode. Открыто)
Dim F As New BinaryFormatter
Dim RestoredParms As New ParmExample
RestoredParms = f. Десериализовать
s. Близко()
Приставка. WriteLine (ВосстановленныеParms. Parm1Name)
Приставка. WriteLine (ВосстановленныеParms. Parm1Value)
Приставка. WriteLine (ВосстановленныеParms. Parm2Name)
Приставка. WriteLine (ВосстановленныеParms. Parm2Value)
End Sub
Конечный класс

Структура или коллекция (например, ArrayList) а не Учебный класс можно также сериализовать в файл таким же образом.

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

Первое, что вы должны заметить в этом примере, это атрибут в Учебный класс. Атрибуты Это просто дополнительная информация, которую вы можете предоставить VB.NET об объекте, и они используются для множества разных вещей. Атрибут в этом коде говорит VB.NET добавить дополнительный код, чтобы впоследствии все в этом классе можно было сериализовать.

Если в классе есть определенные предметы, которые вы не хотите быть сериализованным, вы можете использовать атрибут для исключения их:

Public Parm3Value As String = "Все, что угодно"

В примере, обратите внимание, что Сериализация и Deserialize методы BinaryFormatter объект (е в этом примере).

е. Сериализация (s, ParmData)

Этот объект принимает FileStream объект и объект для сериализации в качестве параметров. Мы увидим, что VB.NET предлагает еще один объект, который позволяет выразить результат в виде XML.

И последнее замечание: если ваш объект включает в себя другие подчиненные объекты, они тоже будут сериализованы! Но с тех пор все объекты, которые сериализуются должен быть отмечен атрибут, все эти дочерние объекты должны быть помечены таким же образом.

Просто чтобы быть полностью понятным о том, что происходит в вашей программе, вы можете отобразить файл с именем ParmData в блокноте, чтобы увидеть, как выглядят сериализованные данные. (Если вы следовали этому коду, он должен быть в бен. отлаживать Папка в вашем проекте.) Поскольку это двоичный файл, большая часть содержимого не является читаемым текстом, но вы должны иметь возможность видеть любые строки в вашем сериализованном файле. Далее мы сделаем XML-версию, и вы, возможно, захотите сравнить их, чтобы знать разницу.

Сериализация в XML вместо двоичного файла требует очень мало изменений. XML не так быстр и не может захватывать некоторую информацию об объектах, но он гораздо более гибкий. Сегодня XML может использоваться практически любой другой программной технологией в мире. Если вы хотите быть уверены, что ваши файловые структуры не «привязывают вас» к Microsoft, это хороший вариант для изучения. Microsoft подчеркивает «LINQ to XML» для создания файлов данных XML в своих новейших технологиях, но многие все еще предпочитают этот метод.

«Х» в XML выступает за еИксtensible. В нашем примере XML мы собираемся использовать одно из этих расширений XML, технологию под названием МЫЛО. Раньше это означало «Простой протокол доступа к объектам», но теперь это просто имя. (SOAP был обновлен настолько, что оригинальное имя больше не подходит.)

Главное, что мы должны изменить в наших подпрограммах - это дешифрирование форматера сериализации. Это должно быть изменено как в подпрограмме, которая сериализует объект, так и в подпрограмме, которая снова десериализует его. Для конфигурации по умолчанию это включает три изменения в вашей программе. Сначала нужно добавить ссылку на проект. Щелкните правой кнопкой мыши проект и выберите Добавить ссылку .... Удостовериться ...

Система. Продолжительность. Сериализация. Форматтеры. Мыло

... был добавлен в проект.

Затем измените два оператора в программе, которая ссылается на них.

Система импорта. Продолжительность. Сериализация. Форматтеры. Мыло
Dim F As New SoapFormatter

На этот раз, если вы проверите то же самое ParmData файл в блокноте, вы увидите, что все это в удобочитаемом тексте XML, таких как ...

Имя Parm1
12345
Имя Parm2
54321.12345

В этом файле также есть много дополнительного XML, необходимого для стандарта SOAP. Если вы хотите проверить, что Атрибут делает, вы можете добавить переменную с этим атрибутом и посмотреть на файл, чтобы убедиться, что он не включен.

Пример, который мы только что закодировали, только сериализует данные, но предположим, что вам нужно контролировать, как данные сериализуются. VB.NET может сделать это тоже!

Для этого нужно немного углубиться в концепцию сериализации. VB.NET имеет новый объект, чтобы помочь здесь: SerializationInfo. Хотя у вас есть возможность кодировать пользовательское поведение сериализации, оно требует дополнительных затрат на кодирование.

Основа дополнительный код показан ниже. Помните, этот класс используется вместо ParmExample класс, показанный в предыдущем примере. Это не полный пример. Цель состоит в том, чтобы показать вам новый код, необходимый для пользовательской сериализации.

Система импорта. Продолжительность. Сериализация
_
Открытый класс CustomSerialization
Реализует ISerializable
данные для сериализации здесь
Public SerializedVariable как Тип
Public Sub New ()
конструктор по умолчанию, когда класс
'создан - пользовательский код может быть
здесь тоже добавлено
End Sub
Public Sub New (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext)
'инициализировать переменные вашей программы из
'сериализованное хранилище данных
End Sub
Public Sub GetObjectData (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext) _
Реализует ISerializable. GetObjectData
обновить хранилище сериализованных данных
'из переменных программы
End Sub
Конечный класс

Идея в том, что теперь вы можете (и, на самом деле, вы должен) все обновления и чтения данных в сериализованном хранилище данных в новый и GetObjectData Подпрограммы. Вы также должны включить общий новый конструктор (без списка параметров), потому что вы реализуете интерфейс.

Класс, как правило, будет иметь закодированные формальные свойства и методы ...

Общая собственность
Приватный newPropertyValue As String
Открытое свойство NewProperty () As String
Получить
Возврат newPropertyValue
Конец получить
Set (значение ByVal As String)
newPropertyValue = значение
Конец набора
Конечная недвижимость
Общий метод
Public Sub MyMethod ()
код метода
End Sub

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

новый подпрограмма будет выглядеть примерно так:

Public Sub New (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext)
'инициализировать переменные вашей программы из
'сериализованное хранилище данных
Parm1Name = информация. GetString ( "A")
Parm1Value = информация. GetInt32 ( "B")
«Новый суб продолжается»

когда Deserialize называется на BinaryFormatter объект, этот подпрограмма выполняется и SerializationInfo объект передается новый подпрограмма. Затем New может делать все, что нужно с сериализованными значениями данных. Например ...

MsgBox ("Это Parm1Value Times Pi:" _
& (Parm1Value * Math. PI) .ToString)

Обратное происходит, когда Сериализация называется, но BinaryFormatter вызовы объекта GetObjectData вместо.

Public Sub GetObjectData (_
ByVal info As SerializationInfo, _
ByVal context As StreamingContext) _
Реализует ISerializable. GetObjectData
обновить хранилище сериализованных данных
'из переменных программы
Если Parm2Name = "Тест", то
Информация. AddValue ("a", "Это тест.")
еще
Информация. AddValue ("a", "На этот раз не тестировать.")
End If
Информация. AddValue ("b", 2)

Обратите внимание, что данные добавляются в сериализованный файл в виде пар имя / значение.

Многие веб-страницы, которые я обнаружил при написании этой статьи, похоже, не содержат реального рабочего кода. Интересно, выполнил ли автор какой-либо код, прежде чем писать статью?

instagram story viewer