Powtórzenie – 3_xml_zapisz/odczyt
Copyright © 2015, mgr inż. Janusz Bonarowski 1
Zapis/odczyt właściwości obiektu serializacją do pliku xml Zadanie
Utwórzmy klasę Prostokat o właściwościach Dlugosc_boku1 i Dlugosc_boku2.
Utwórzmy instancję tej klasy. Podstawmy wartości właściwości z TextBoxów.
Zapiszmy serializacją obiekt w pliku xml.
Następnie przeedytujmy plik xml, korzystając z Notatnika, zmniejszając wartości właściwości o połowę.
Odczytajmy serializacją plik xml po zmianie i wyświetlmy wartości właściwości.
Form1.vb
Imports System.IO Imports System.Xml Public Class Form1
Dim mojP As New Prostokat
Private Sub btnZapisz_Click(sender As Object, e As EventArgs) _
Handles btnZapisz.Click mojP.Dlugosc_boku1 = CSng(TextBox1.Text)
mojP.Dlugosc_boku2 = CSng(TextBox2.Text) '
' Zapisanie właściwości obiektu do pliku serializacją '
Dim SerializacjaDoPlikuXml As Serialization.XmlSerializer Dim plikXML As FileStream = _
New FileStream("Dane_prostokata.xml", FileMode.Create, FileAccess.Write, FileShare.None)
SerializacjaDoPlikuXml = _
New Serialization.XmlSerializer(GetType(Prostokat)) SerializacjaDoPlikuXml.Serialize(plikXML, mojP)
plikXML.Close()
MsgBox("Plik XML został zapisany.") End Sub
Private Sub btnOdczytaj_Click(sender As Object, e As EventArgs) _
Handles btnOdczytaj.Click ' Odczytanie właściwości z pliku xml
Dim PlikDanych As FileStream =
File.Open("Dane_prostokata.xml", FileMode.Open, FileAccess.Read) Dim MojaSerializacja As New _
Serialization.XmlSerializer(GetType(Prostokat)) mojP = MojaSerializacja.Deserialize(PlikDanych) PlikDanych.Close()
' Przełożenie właściwości z obiektu do TextBoxów TextBox1.Text = mojP.Dlugosc_boku1.ToString TextBox2.Text = mojP.Dlugosc_boku2.ToString MsgBox("Plik XML został odczytany.")
End Sub End Class
Powtórzenie – 3_xml_zapisz/odczyt
Copyright © 2015, mgr inż. Janusz Bonarowski 2
Class1.vb
Public Class Prostokat
Private _Dlugosc_boku1 As Single Private _Dlugosc_boku2 As Single
Public Property Dlugosc_boku1 As Single Get
Return _Dlugosc_boku1 End Get
Set(value As Single)
_Dlugosc_boku1 = value End Set
End Property
Public Property Dlugosc_boku2 As Single Get
Return _Dlugosc_boku2 End Get
Set(value As Single)
_Dlugosc_boku2 = value End Set
End Property End Class
Jeśli zapisaliśmy aplikację w katalogu:
c:\tkm\gr_2.1_MiBM\xml_serializacja
i w kodzie nie zapisaliśmy pliku w jakiejś szczególnej lokalizacji, to odnajdziemy go na ścieżce:
c:\tkm\gr_2.1_MiBM\xml_serializacja\xml_serializacja\bin\Debug\Dane_prostokata.xml
Rysunek 1. Plik xml przed edycją w Internet Explorzerze
Rysunek 2. Plik po edycji w Notatniku
Powtórzenie – 3_xml_zapisz/odczyt
Copyright © 2015, mgr inż. Janusz Bonarowski 3
Uwaga:
W przedstawionej powyżej procedurze Private Sub btnZapisz_Click(…) zapisanie właściwości obiektu odbywa się odrębną procedurą – natomiast w aplikacji Wałek procedura XMLZapisz nie jest niezależnym kodem lecz jest metodą w konkretnej klasie (a dokładniej – jest metodami w klasach Stopien_walu, StopienFazaZLewej i StopienFazaZPrawej).
Pociąga to za sobą inną postać przedostatniego wiersza tego kodu.
W wierszu tym, drugim oczekiwanym elementem wywołania metody Serialize jest obiekt do serializacji, patrz rys. 3.
Rysunek 3
Co tam wpisać?
Gdy w aplikacji Wałek mamy do czynienia z metodą XMLZapisz w konkretnej klasie – wpisujemy w tym miejscu Me, rys. 4, czyli po polsku mówiąc „ja” lub „mnie”. Klasa „wie jak się nazywa” i mówi po angielsku o sobie Me – czyli serializuj „mnie”.
Rysunek 4
Natomiast w procedurze niezależnej, pokazanej w tym dokumencie na str. 1, obsługującej zdarzenie btnZapisz_Click() musimy jawnie wskazać o jaki obiekt nam chodzi stąd wpisujemy nazwę obiektu, w tym przypadku mojP, rys. 5.
Rysunek 5