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
 
Weitere Links zum Thema
Binäre Suche in einem Array
Dictionary als kleine Datenbank

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (19 kB) Downloads bisher: [ 304 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Dienstag, 27. Dezember 2011