vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2019
 
zurück
Rubrik: Variablen/Strings   |   VB-Versionen: VB.NET07.11.06
Einfaches speichern von Objekten

Den aktuellen Zustand eines Objekts in .Net sehr leicht im XML-Format speichern

Autor:   Daniel BühlingBewertung:     [ Jetzt bewerten ]Views:  15.587 
www.mysldworks.deSystem:  WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Den aktuellen Zustand eines Objekts kann man in .NET 2.0 sehr leicht im XML-Format speichern.

Man benötigt nur wenige Zeilen Code um auch sehr umfangreiche Objekte in eine Datei zu speichern. Dabei hilft uns die Klasse System.Xml.Serialization.XmlSerializer. Eine so erzeugte Datei kann jederzeit eben so leicht wieder in ein Objekt geladen werden.

  • Eigenschaften (Property) der Klasse müssen als Public deklariert werden
  • Eigenschaften dürfen nicht ReadOnly sein
  • Parameterloser Konstruktor

    Funktion zum Speichern eines Objekts:

    ''' <summary>
    ''' Der Inhalt des übergebenen Objekts wird im XML-Format 
    ''' unter dem Speicherpfad gespeichert
    ''' </summary>
    ''' <typeparam name="T">Typ (Klasse) welche abgespeichert wird</typeparam>
    ''' <param name="Objekt">Objekt dessen Inhalt gespeichert wird</param>
    ''' <param name="Speicherpfad">Pfad unter welchem der Inhalt des 
    ''' Objekts gespeichert wird, muss nicht mit xml enden</param>
    ''' <returns>Funktion erfolgreich durchgeführt</returns>
    ''' <remarks></remarks>
    Public Shared Function ObjektSpeichern(Of T)( _
      ByVal Objekt As T, _
      ByVal Speicherpfad As String) As Boolean
     
      Dim Serializer As System.Xml.Serialization.XmlSerializer
      Dim Stream As System.IO.FileStream = Nothing
     
      Try
        ' Stream zum Speichern öffen
        Stream = New System.IO.FileStream(Speicherpfad, _
          IO.FileMode.Create)
        ' Übergebene Klasse in das XML-Format serialisieren
        Serializer = _
          New System.Xml.Serialization.XmlSerializer( _
          Objekt.GetType)
        ' Objekt abspeichern
        Serializer.Serialize(Stream, Objekt)
        ' Stream wieder schließen
        Stream.Close()
     
        Return True
      Catch ex As Exception
        If Not Stream Is Nothing Then
          Stream.Close()
        End If
        Debug.Print("Fehler" & ex.Message)
        Return False
      End Try
    End Function

    Funktion zum Laden einer Klasse:

    ''' <summary>
    ''' Übergebenes Objekt wird mit dem Inhalt der 
    ''' übergebenen XML-Datei befüllt 
    ''' </summary>
    ''' <typeparam name="T">Typ (Klasse) welche abgespeichert wird</typeparam>
    ''' <param name="Ladepfad">Pfad der XML-Datei, muss mit der 
    ''' Klasse serialisierbar sein</param>
    ''' <param name="Objekt">Objekt welches mit dem Inhalt der XML-Datei 
    ''' befüllt wird</param>
    ''' <returns>Funktion erfolgreich durchgeführt</returns>
    ''' <remarks></remarks>
    Public Shared Function ObjektLaden(Of T)( _
      ByVal Ladepfad As String, _
      ByRef Objekt As T) _
      As Boolean
     
      Dim Serializer As System.Xml.Serialization.XmlSerializer
      Dim Stream As System.IO.FileStream = Nothing
     
      Try
        ' Stream zum Lesen öffen
        Stream = New System.IO.FileStream(Ladepfad, IO.FileMode.Open)
        ' Übergebene Klasse in das XML-Format serialisieren
        Serializer = _
          New System.Xml.Serialization.XmlSerializer(Objekt.GetType)
     
        ' Objekt mit dem Inhalt der Datei befüllen
        Objekt = CType(Serializer.Deserialize(Stream), T)
        ' Stream wieder schließen
        Stream.Close()
     
        Return True
     
      Catch ex As Exception
        If Not Stream Is Nothing Then
          Stream.Close()
        End If
        Debug.Print("Fehler" & ex.Message)
        Return False
      End Try
    End Function

    Beispiel für das Speichern und Laden von Objekten
    Fügen Sie in ein leeres "Windows Anwendung" Projekt eine Klasse mit folgendem Code hinzu:

    Public Class Class1
      Dim sTest1 As String
      Dim sTest2 As String
      Dim iTest1 As Integer
      Dim bTest1 As Boolean
     
      Public Property String1() As String
        Get
          Return sTest1
        End Get
        Set(ByVal value As String)
          sTest1 = value
        End Set
      End Property
     
      Public Property String2() As String
        Get
          Return sTest2
        End Get
        Set(ByVal value As String)
          sTest2 = value
        End Set
      End Property
     
      Public Property Integer1() As Integer
        Get
          Return iTest1
        End Get
        Set(ByVal value As Integer)
          iTest1 = value
        End Set
      End Property
     
      Public Property Boolean1() As Boolean
        Get
          Return bTest1
        End Get
        Set(ByVal value As Boolean)
          bTest1 = value
        End Set
      End Property
    End Class

    Wichtig ist, dass die Klasse, sowie die Propertys als Public deklariert werden.

    Fügen Sie dem Projekt jetzt noch eine Form mit zwei Buttons hinzu und benennen die Buttons "btnLaden" und "btnSpeichern". In der Codeansicht des Formulars fügen Sie nun bitte folgenden Code ein:

    Private Sub btnSpeichern_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles btnSpeichern.Click
     
      ' Objekt mit der Class1 zum Testen deklarieren
      Dim oSpeichern As New Class1
     
      ' Objekt befüllen
      oSpeichern.Boolean1 = True
      oSpeichern.Integer1 = 1234
      oSpeichern.String1 = "ABC"
      oSpeichern.String2 = "defg"
     
      ' Objekt auf dem Desktop speichern
      Dim sPfad As String
      sPfad = System.Environment.GetFolderPath( _
        Environment.SpecialFolder.Desktop)
      sPfad = sPfad & "\Test.xml"
      ObjektSpeichern(Of Class1)(oSpeichern, sPfad)
    End Sub
    Private Sub btnLaden_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles btnLaden.Click
     
      ' Objekt mit der Class1 zum Testen deklarieren
      Dim oLaden As New Class1
     
      ' Objekt mit der Datei auf dem Desktop befüllen
      Dim sPfad As String
      sPfad = System.Environment.GetFolderPath( _
        Environment.SpecialFolder.Desktop)
      sPfad = sPfad & "\Test.xml"
      If IO.File.Exists(sPfad) Then
        ObjektLaden(Of Class1)(sPfad, oLaden)
     
        ' Inhalt des Testobjekts in das Direktfenster ausgeben
        Debug.Print(CStr(oLaden.Boolean1))
        Debug.Print(CStr(oLaden.Integer1))
        Debug.Print(oLaden.String1)
        Debug.Print(oLaden.String2)
      Else
        Debug.Print("Die Datei: " & sPfad & " ist nicht vorhanden")
      End If
    End Sub

    Fügen Sie der Form abschließend noch die beiden am Anfang aufgezeigten Funktion zum Laden und Speichern der Objekte hinzu (Function ObjektSpeichern und Function ObjektLaden).

    Wenn Sie nun auf den Button "btnSpeichern" klicken wird das Objekt, mit dem im Code bestimmten Inhalt, auf Ihrem Desktop unter Test.xml gespeichert.
    Die Test.xml Datei sollte folgenden Inhalt haben:

    <?xml version="1.0"?>
    <Class1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <String1>ABC</String1>
      <String2>defg</String2>
      <Integer1>1234</Integer1>
      <Boolean1>true</Boolean1>
    </Class1>

    Durch Klick auf "btnLaden" wird ein leeres Objekt mit dem Inhalt der Test.xml befüllt.

  • Dieser Tipp wurde bereits 15.587 mal aufgerufen.

    Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

    Über diesen Tipp im Forum diskutieren
    Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

    Neue Diskussion eröffnen

    nach obenzurück


    Anzeige

    Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
    (einschl. Beispielprojekt!)

    Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
    - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
    - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
    Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
     
       

    Druckansicht Druckansicht Copyright ©2000-2019 vb@rchiv Dieter Otter
    Alle Rechte vorbehalten.
    Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

    Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel