Die Community zu .NET und Classic VB.
Menü

VB.NET-Tipp 0026: XML-Serialisierung von Objekten

 von 

Beschreibung

Dieses Beispiel zeigt, wie man Anwendungseinstellungen in einer eigenen Klasse ablegen und diese dann in eine XML-Datei mittels Serialisierung speichern kann. Die Einstellungen können im Programm geändert und anschliessend gespeichert werden.

Schwierigkeitsgrad:

Schwierigkeitsgrad 1

Framework-Version(en):

.NET Framework 1.0, .NET Framework 1.1, .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5

.NET-Version(en):

Visual Basic 2002, Visual Basic 2003, Visual Basic 2005, Visual Basic 2008

Download:

Download des Beispielprojektes [5,38 KB]

' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2002/2003
' Option Strict:    An
' Option Explicit:  An
'
' Referenzen: 
'  - System
'  - System.Drawing
'  - System.Windows.Forms
'  - System.XML
'

' ##############################################################################
' ############################# Configuration.vb ###############################
' ##############################################################################
Option Explicit On 
Option Strict On
Option Compare Binary

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization

' <remarks>
'   Stellt Funktionalität zum Zugriff auf 
'   bestimmte Einstellungen, die aus einer Datei geladen
'   bzw. in eine Datei gespeichert werden können, bereit.
' </remarks>
Public Class Configuration
    Private m_cfgConfiguration As ConfigurationData
    Private m_cfgDefaultConfiguration As ConfigurationData

    ' <summary>
    '   Erstellt eine neue Instanz der Klasse und 
    '   weist den Eigenschaften die in den Parametern
    '   angegebenen Werte zu.
    ' </summary>
    ' <param name="cfgDefaultData">Wert der 
    '    Eigenschaft <c>DefaultData</c>.</param>
    Public Sub New( _
      ByVal cfgDefaultData As ConfigurationData)
        Me.Configuration = cfgDefaultData
        Me.DefaultConfiguration = cfgDefaultData
    End Sub

    ' <summary>
    '   Speichert die Einstellungen in die 
    '   im Parameter <paramref name="strFileName"/>
    '   angegebene Datei.
    ' </summary>
    ' <param name="strFileName">Name der Datei, 
    '  in die die Einstellungen gespeichert werden.</param>
    ' <exception cref="System.Exception">Wird ausgelöst, 
    '   wenn beim Speichern ein Fehler auftritt.</exception>
    Public Sub Save(ByVal strFileName As String)
        Dim writer As XmlWriter
        Try
            Dim ser As XmlSerializer = _
              New XmlSerializer(GetType(ConfigurationData))
            writer = New XmlTextWriter(strFileName, _
              New System.Text.UTF8Encoding())
            ser.Serialize(writer, m_cfgConfiguration)
        Catch ex As Exception
            Throw ex
        Finally
            writer.Close()
        End Try
        writer.Close()
    End Sub

    ' <summary>
    '   Lädt die Einstellungen aus der im Parameter 
    '   <paramref name="strFileName"/> angegebenen
    '   Datei.
    ' </summary>
    ' <param name="strFileName">Name der Datei, die 
    '    die Einstellungen enthält.</param>
    ' <exception cref="System.Exception">
    '   Wird ausgelöst, wenn ein Fehler beim 
    '   Laden auftritt und daher die Standard-Einstellungen
    '   verwendet werden.
    ' </exception>
    Public Sub Load(ByVal strFileName As String)
        Try
            Dim ser As XmlSerializer = _
              New XmlSerializer(GetType(ConfigurationData))
            Dim fs As FileStream = _
              New FileStream(strFileName, FileMode.Open)
            Dim reader As XmlReader = _
              New XmlTextReader(fs)
            m_cfgConfiguration = _
              CType(ser.Deserialize(reader), ConfigurationData)
            reader.Close()
        Catch

            ' Es ist ein Fehler beim Lesen aufgetreten 
            ' (Datei existiert nicht, kann nicht gelesen
            ' werden oder besitzt ein ungültiges Format, 
            ' das nicht deserialsiert werden kann).
            ' In diesem Fall werden die im Konstruktor 
            ' der Klasse angegebenen Standardeinstellungen
            ' benutzt.
            m_cfgConfiguration = m_cfgDefaultConfiguration
            Throw New Exception("Error loading configuration, " & _
              "using default configuration data instead.")
        End Try
    End Sub

    ' <summary>
    '   Gibt die Konfigurationseinstellungen an 
    '   oder gibt sie zurück.
    ' </summary>
    ' <value>Objekt, das die 
    '    Konfigurationseinstellungen enthält.</value>
    Public Property Configuration() As ConfigurationData
        Get
            Return m_cfgConfiguration
        End Get
        Set(ByVal Value As ConfigurationData)
            m_cfgConfiguration = Value
        End Set
    End Property

    ' <summary>
    '   Gibt die Standard-Konfigurationseinstellungen 
    '   an oder gibt sie zurück.
    ' </summary>
    ' <value>Objekt, das die Standard-Konfigurationseinstellungen 
    '   enthält.</value>
    Public Property DefaultConfiguration() As ConfigurationData
        Get
            Return m_cfgDefaultConfiguration
        End Get
        Set(ByVal Value As ConfigurationData)
            m_cfgDefaultConfiguration = Value
        End Set
    End Property
End Class
' ##############################################################################
' ########################### ConfigurationData.vb #############################
' ##############################################################################
Option Explicit On 
Option Strict On
Option Compare Binary

Imports System
Imports System.Drawing

' <remarks>
'   Speichert die Konfigurationseinstellungen und 
'   wird beispielsweise in eine XML-Datei
'   serialisiert. Um zusätzliche Einstellungen zu 
'   unterstützen, müssen hier entsprechende
'   Eigenschaften hinzugefügt werden.
' </remarks>
<Serializable()> _
Public Class ConfigurationData
    Private m_ptRectanglePosition As Point
    Private m_intRectangleColor As Integer

    ' <summary>
    '   Erstellt eine neue Instanz der Klasse.
    ' </summary>
    ' 
    ' Für Serialisierung muss ein Standard-Konstruktor 
    ' definiert werden.
    '
    Public Sub New()
    End Sub

    ' <summary>
    '   Erstellt eine neue Instanz der Klasse 
    '   und weist den Eigenschaften die in den 
    '   Parametern übergebenen Werte zu.
    ' </summary>
    ' <param name="ptRectanglePosition">Wert der Eigenschaft 
    '    <c>RectanglePosition</c>.</param>
    ' <param name="colorRectangleColor">Wert der Eigenschaft 
    '    <c>RectangleColor</c>.</param>
    Public Sub New( _
      ByVal ptRectanglePosition As Point, _
      ByVal colorRectangleColor As Color)
        Me.RectangleColor = colorRectangleColor.ToArgb()
        Me.RectanglePosition = ptRectanglePosition
    End Sub

    ' <summary>
    '   Gibt die Position des Rechtecks an 
    '   oder gibt sie zurück.
    ' </summary>
    ' <value>Position des Rechtecks.</value>
    Public Property RectanglePosition() As Point
        Get
            Return m_ptRectanglePosition
        End Get
        Set(ByVal Value As Point)
            m_ptRectanglePosition = Value
        End Set
    End Property

    ' <summary>
    '   Gibt die Farbe des Rechtecks an 
    '   oder gibt sie zurück.
    ' </summary>
    ' <value>Farbe des Rechtecks.</value>
    Public Property RectangleColor() As Integer
        Get
            Return m_intRectangleColor
        End Get
        Set(ByVal Value As Integer)
            m_intRectangleColor = Value
        End Set
    End Property
End Class
' ##############################################################################
' ################################ MainForm.vb #################################
' ##############################################################################
Option Explicit On 
Option Strict On
Option Compare Binary

Imports System
Imports System.Drawing
Imports System.Windows.Forms

' <remarks>
'   Hauptformular der Anwendung.
' </remarks>
Public Class MainForm
    Inherits System.Windows.Forms.Form

    Private m_Configuration As Configuration
    Private m_blnPanelSelected As Boolean
    Private m_ptPosition As Point


    Private Sub pnlLayer_MouseDown( _
      ByVal sender As System.Object, _
      ByVal e As System.Windows.Forms.MouseEventArgs) _
      Handles pnlLayer.MouseDown
        m_blnPanelSelected = True
        m_ptPosition = New Point(e.X, e.Y)
    End Sub

    Private Sub pnlLayer_MouseUp( _
      ByVal sender As System.Object, _
      ByVal e As System.Windows.Forms.MouseEventArgs) _
      Handles pnlLayer.MouseUp
        m_blnPanelSelected = False
    End Sub

    Private Sub pnlLayer_MouseMove( _
      ByVal sender As System.Object, _
      ByVal e As System.Windows.Forms.MouseEventArgs) _
      Handles pnlLayer.MouseMove
        If m_blnPanelSelected Then
            Me.pnlLayer.Top += (e.Y - m_ptPosition.Y)
            Me.pnlLayer.Left += (e.X - m_ptPosition.X)
        End If
    End Sub

    Private Sub cmdColor_Click( _
      ByVal sender As Object, _
      ByVal e As System.EventArgs) _
      Handles cmdColor.Click
        Dim cdlg As New ColorDialog()
        If cdlg.ShowDialog(Me) = DialogResult.OK Then
            Me.pnlLayer.BackColor = cdlg.Color
        End If
    End Sub

    Private Sub btnLoad_Click( _
      ByVal sender As Object, _
      ByVal e As System.EventArgs) _
      Handles btnLoad.Click
        Try
            m_Configuration.Load( _
              Application.StartupPath & "\config.xml")
        Catch ex As Exception
            MessageBox.Show( _
              "Error: " & ex.Message, _
              "Error loading Configuration", _
              MessageBoxButtons.OK, _
              MessageBoxIcon.Exclamation)
        End Try
        Me.pnlLayer.Location = _
          m_Configuration.Configuration.RectanglePosition
        Me.pnlLayer.BackColor = _
          Color.FromArgb(m_Configuration.Configuration.RectangleColor)
    End Sub

    Private Sub btnSave_Click( _
      ByVal sender As Object, _
      ByVal e As System.EventArgs) _
      Handles btnSave.Click
        m_Configuration.Configuration.RectangleColor = _
          Me.pnlLayer.BackColor.ToArgb()
        m_Configuration.Configuration.RectanglePosition = _
          Me.pnlLayer.Location
        Try
            m_Configuration.Save(Application.StartupPath & _
              "\config.xml")
        Catch ex As Exception
            MessageBox.Show( _
              "Error: " & ex.Message, _
              "Error saving Configuration", _
              MessageBoxButtons.OK, _
              MessageBoxIcon.Exclamation)
        End Try
    End Sub
End Class

Ihre Meinung  

Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.

Archivierte Nutzerkommentare 

Klicken Sie diesen Text an, wenn Sie die 1 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.

Kommentar von Uli am 06.04.2008 um 19:06

Hallo funktioniert wunderbar, nur könnte es jemand etwas näher erklären.was muss ich zum beispiel ändern wenn ich 3 Buttons habe wo die beschriftung aus der config geladen werden soll. und auch setzen kann.

mfg