VB.NET-Tipp 0026: XML-Serialisierung von Objekten
von Herfried Wagner
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: | 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: |
' 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