Поделиться через


Пошаговое руководство. Сохранение объекта в Visual Basic

Обновлен: Ноябрь 2007

Хотя в режиме разработки можно задать для свойств объектов значения по умолчанию, любые значения, введенные во время выполнения, утрачиваются при уничтожении объекта. Использование сериализации в Visual Basic для сохранения данных объекта между выпуском экземпляров позволяет запоминать значения и извлекать их при следующем создании экземпляра.

Для хранения простых данных, таких как имя или число, можно использовать объект My.Settings. Дополнительные сведения см. в разделе Объект My.Settings.

В данном пошаговом руководстве будет создан простой объект Loan и его данные будут сохранены в файле. В последствии можно воссоздать данные из файла при повторном создании объекта. Наконец, этот код можно изменить для хранения данных в формате SOAP.

et91as27.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Если такого файла не существует, это пошаговое руководство создает новый файл. Если приложение должно создать файл, то ему необходимо разрешение на Create для папки. Для задания разрешений используются списки управления доступом. Если файл уже существует, приложению требуется лишь разрешение Write на запись. Возможно, безопаснее создать файл во время развертывания и предоставить разрешение Read для отдельного файла (вместо создания разрешений для папки). По тем же соображениям, лучше сохранять данные в пользовательских папках, а не в корневом каталоге или в папке Program Files.

et91as27.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

В этом примере данные сохраняются в файле в двоичном или SOAP формате. Эти форматы не следует использовать для конфиденциальных данных, таких как пароли или сведения о кредитных карточках.

et91as27.alert_note(ru-ru,VS.90).gifПримечание.

Отображаемые диалоговые окна и команды меню могут отличаться от описанных в справке в зависимости от текущих параметров или выпуска среды. Чтобы изменить параметры, в меню Сервис выберите пункт Параметры импорта и экспорта. Дополнительные сведения содержатся в разделе Параметры Visual Studio.

Создание объекта Loan

Первым шагом является создание класса Loan и тестового приложения, которое использует этот класс.

Чтобы создать класс Loan

  1. Создайте новый проект библиотеки классов и назовите его LoanClass. Дополнительные сведения см. в разделе Практическое руководство. Создание решений и проектов.

  2. В Редакторе кода замените имя класса Class1 на Loan.

  3. Добавьте в класс следующие открытые члены:

    Public LoanAmount As Double = 10000.0
    Public InterestRate As Double = 7.5
    Public Term As Integer = 36
    Public Customer As String
    

Необходимо также создать простое приложение, которое использует класс Loan.

Создание тестового приложения

  1. Чтобы добавить в решение проект приложения Windows, щелкните в меню Файл, пункт Добавить, и затем щелкните Новый проект.

  2. В диалоговом окне Добавление нового проекта введите LoanApp в качестве имени проекта и щелкните кнопку OK, чтобы закрыть диалоговое окно.

  3. Выберите проект LoanApp в Обозревателе решений.

  4. В меню Проект щелкните команду Назначить автозагружаемым проектом.

  5. В меню Проект щелкните Добавить ссылку.

  6. В диалоговом окне Добавление ссылки перейдите на вкладку Проекты и выберите проект LoanClass.

  7. Нажмите кнопку ОК, чтобы закрыть диалоговое окно.

  8. В конструкторе добавьте в форму четыре элемента управления TextBox.

  9. В редакторе кода добавьте следующий код:

    Private TestLoan As New LoanClass.Loan
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

Теперь можно построить и запустить приложение. Обратите внимание на то, что в текстовых полях отображаются значения по умолчанию из класса Loan. Попробуйте изменить значение процентной ставки с 7,5 на 7,1, затем закройте приложение и запустите его снова — будет восстановлено заданное по умолчанию значение 7,5.

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

Использование сериализации для хранения объекта

Чтобы сохранить значения для класса Loan, прежде всего необходимо отметить класс атрибутом Serializable.

Чтобы отметить класс как сериализуемый

  • Измените объявление класса для класса Loan следующим образом:

    <Serializable()> Public Class Loan
    

Атрибут Serializable сообщает компилятору, что все находящееся в классе может быть сохранено в файле. В этом случае необходимо сохранять только член InterestRate, скорее всего не требуется сохранять члены Customer, LoanAmount или Period. Атрибут NonSerialized используется для пометки членов класса, которые не следует сохранять. Для простоты в этом примере сохраняется все элементы кроме Customer.

Чтобы предотвратить сериализацию членов

  • Измените объявление члена Customer следующим образом:

    <NonSerialized()> Public Customer As String
    

Следующим шагом будет добавление кода сериализации в приложение LoanApp. Для сериализации класса и записи его в файл следует использовать пространства имен System.IO и System.Xml.Serialization. Во избежание ввода полных имен можно использовать оператор Imports.

Чтобы добавить ссылки на пространства имен

  • Добавьте следующие инструкции Imports в начало класса Form1:

    Imports System.IO
    Imports System.Runtime.Serialization.Formatters.Binary
    

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

Следующим шагом является добавление кода десериализации объекта из файла при создании объекта.

Чтобы десериализовать объект

  1. Добавьте в класс константу для имени файла сериализованных данных.

    Const FileName As String = "SavedLoan.bin"
    
  2. Измените код процедуры события Form1_Load следующим образом:

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
    System.EventArgs) Handles MyBase.Load
        If File.Exists(FileName) Then
            Dim TestFileStream As Stream = File.OpenRead(FileName)
            Dim deserializer As New BinaryFormatter
            TestLoan = CType(deserializer.Deserialize(TestFileStream), LoanClass.Loan)
            TestFileStream.Close()
        End If
        TextBox1.Text = TestLoan.LoanAmount.ToString
        TextBox2.Text = TestLoan.InterestRate.ToString
        TextBox3.Text = TestLoan.Term.ToString
        TextBox4.Text = TestLoan.Customer
    End Sub
    

    Прежде всего убедитесь, что файл существует. Если он существует, то создайте класс Stream для чтения двоичного файла и класс BinaryFormatter для преобразования файла. Метод CType используется для преобразования потока в тип объекта Loan.

Далее необходимо добавить код для сохранения данных, введенных в текстовые поля класса Loan, и сериализовать класс в файл.

Чтобы сохранить данные и сериализовать класс

  • В процедуру события Form1_Closing добавьте следующий код:

    Private Sub Form1_Closing(ByVal sender As System.Object, ByVal e As _
    System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
        TestLoan.LoanAmount = CType(TextBox1.Text, Double)
        TestLoan.InterestRate = CType(TextBox2.Text, Double)
        TestLoan.Term = CType(TextBox3.Text, Integer)
        TestLoan.Customer = TextBox4.Text
    
        Dim TestFileStream As Stream = File.Create(FileName)
        Dim serializer As New BinaryFormatter
        serializer.Serialize(TestFileStream, TestLoan)
        TestFileStream.Close()
    End Sub
    

Теперь можно снова построить и запустить приложение. Первоначально в текстовых полях отображаются значения по умолчанию. Попробуйте изменить их и ввести имя в четвертое текстовое поле. Закройте приложение, а затем снова запустите его. Обратите внимание, что теперь в текстовых полях отображаются новые значения, за исключением поля имени, которое имеет пометку NonSerialized.

Сохранение объекта с использованием формата SOAP

В предыдущем примере разобран порядок сохранения объекта в текстовом файле с использованием двоичного формата. Двоичный формат подходит для большинства приложений Windows. Для веб-приложений или веб-служб XML может потребоваться сохранение объекта в XML- файле с использованием формата SOAP, который облегчает совместное использование объекта.

Для сохранения объекта в формате SOAP сначала необходимо добавить ссылку на класс SoapFormatter. Класс SoapFormatter находится в собственном пространстве имен System.Runtime.Serialization.Formatters.Soap:

Для сохранения объекта в формате SOAP

  1. Выберите проект LoanApp в Обозревателе решений.

  2. В меню Проект щелкните Добавить ссылку.

  3. В диалоговом окне Добавление ссылки щелкните по закладке .NET и выберите компонент System.Runtime.Serialization.Formatters.Soap.

  4. Нажмите кнопку ОК, чтобы закрыть диалоговое окно.

  5. В Редакторе кода добавьте оператор Imports в начало модуля Form1:

    Imports System.Runtime.Serialization.Formatters.Soap
    
  6. Измените имя файла с SavedLoan.bin на SavedLoan.xml.

  7. В процедуре события Form1_Load измените оператор с Dim из Dim deserializer As New BinaryFormatter на следующий:

    Dim deserializer As New SoapFormatter
    
  8. В процедуре события Form1_Closing измените оператор с Dim из Dim serializer As New BinaryFormatter на следующий:

    Dim serializer As New SoapFormatter
    

Теперь приложение можно построить и проверить. При первом запуске приложения будет создан файл SavedLoan.xml. Чтобы просмотреть файл, выберите параметр Показать все файлы в Обозревателе решений; он расположен в узле Bin для проекта приложения Windows.

et91as27.alert_note(ru-ru,VS.90).gifПримечание.

Если уже установлен режим Показать все файлы, необходимо обновить представление, щелкнув Обновить в меню Вид для отображения файла.

Обратите внимание на то, что три члена LoanClass отображаются в формате XML. Измените значение InterestRate в XML-файле, а затем сохраните его и запустите приложение снова. Во втором текстовом поле появится новое значение процентной ставки.

См. также

Основные понятия

Эквиваленты PropertyBag для пользователей Visual Basic 6.0

Основы сериализации в .NET Framework