![]() |
Tipp 0174
|
Collection serialisieren
|
 |
|
Autor/Einsender: Datum: |
|
Michael Werner 18.12.2007 |
|
Entwicklungsumgebung: |
|
VB.Net 2005 |
Framework: |
|
2.0 |
|
|
Wie kann man am besten kleine Datenstrukturen abspeichern, ohne gleiche eine Datenbank anlegen zu müssen? In einer
Klasse werden die Datenfelder deklariert, die verwendet werden sollen und ein
Konstruktor (New) sorgt für das Anlegen neuer Daten. Da wir die Strukturdaten festhalten wollen,
verwenden wir die Technik der Serialisation im Namespace
System.Runtime.Serialization.Formatters.Binary.
|
Damit dies funktioniert, muss für die Serialisation/Deserialisation der Klasse das Attribut <Serializable()> zugewiesen werden. Das
Attribut wird einfach vor die Klassendeklaration gesetzt. <Serializable()> Public Class XYZ.
Nun ist es ein Leichtes, die Daten per binärer Serialisation in eine Datei abzuspeichern und über den rückläufigen Prozess
der Deserialisation wieder auszulesen. Wir tun dies hier in eine Collection List(Of User), wobei User unser Name für die Klasse ist.
|
Schließlich werden die Daten in einer mehrspaltigen ListBox visualisiert,
wo diese auch gelöscht oder neue Daten hinzugefügt werden können. Dies geschieht mit den Methoden
Add und Remove der Collection. Serialisiert und deserialisiert, also gespeichert und ausgelesen,
wird in den Formularereignissen Load und FormClosing, das heißt beim Laden des Formulars und beim Schließe mit Me.Close.
|
|
Code im Codebereich der
Klasse User.vb |
|
|
<Serializable()> _
Public Class User
' Datenfelder
Public Name As String
Public Email As String
Public Pw As String
' Konstruktor
Public Sub New(ByVal name As String, _
ByVal email As String, _
ByVal pw As String)
Me.Name = name
Me.Email = email
Me.Pw = pw
End Sub
End Class
|
|
|
Code im Codebereich der Form1 |
|
|
#Region " Serialisieren/Deserialisieren"
'Array binär speichern mittels BinaryFormatter
Private Sub SaveSerial()
Dim stream As New FileStream(FileName, FileMode.Create)
Dim converter As New BinaryFormatter()
converter.Serialize(stream, UserListe)
stream.Close()
End Sub
'Binärdatei lesen in Array mittels BinaryFormatter
Private Sub ReadSerial()
Dim stream As New FileStream(FileName, FileMode.Open)
Dim converter As New BinaryFormatter()
UserListe = CType(converter.Deserialize(stream), List(Of User))
stream.Close()
'In die ListBox einlesen
ListBox1.Items.Clear()
For Each us As User In UserListe
ListBox1.Items.Add(us)
Next
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e _
As System.Windows.Forms.FormClosingEventArgs) Handles _
Me.FormClosing
SaveSerial()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e _
As System.EventArgs) Handles MyBase.Load
ListBox1.DrawMode = DrawMode.OwnerDrawFixed
ReadSerial()
End Sub
#End Region
|
|
|
|
|
Windows-Version |
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
|
Download (19
kB)
|
Downloads bisher: [ 377 ]
|
|
|