VB.NET-Tipp 0122: Serialisierung von Objekten
von Robert Closheim
Beschreibung
Hier wird gezeigt wie man Objekte serialisieren - d.h. sie in einem geeigneten Format abspeichern bzw. laden - kann. Als Varianten wird hier die Serialisierung in XML und binär vorgestellt. Durch die Verwendung von generischen Extension-Methoden kann der Mechanismus sehr intuitiv angewendet werden.
Schwierigkeitsgrad: | Framework-Version(en): .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 | .NET-Version(en): 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 2008 ' Option Strict: An ' Option Explicit: An ' Option Infer: Aus ' ' Referenzen: ' - System ' - System.Data ' - System.Deployment ' - System.Drawing ' - System.Windows.Forms ' - System.Xml ' - System.Core ' - System.Xml.Linq ' - System.Data.DataSetExtensions ' ' Imports: ' - Microsoft.VisualBasic ' - System ' - System.Collections ' - System.Collections.Generic ' - System.Data ' - System.Drawing ' - System.Diagnostics ' - System.Windows.Forms ' - System.Linq ' - System.Xml.Linq ' ' ############################################################################## ' ################################# Class1.vb ################################## ' ############################################################################## ' Das Attribut wird für die Binaer Serialisierung benötigt <Serializable()> Public Class Class1 Private myProp1 As String Private myProp2 As Integer Public Property Prop2() As Integer Get Return myProp2 End Get Set(ByVal value As Integer) myProp2 = value End Set End Property Public Property Prop1() As String Get Return myProp1 End Get Set(ByVal value As String) myProp1 = value End Set End Property Public Sub New(ByVal prop1 As String, ByVal prop2 As Integer) Me.Prop1 = prop1 Me.Prop2 = prop2 End Sub ' Die Sub New ist für die XML Serialisierung notwendig Public Sub New() End Sub End Class ' ############################################################################## ' ################################# Form1.vb ################################### ' ############################################################################## Public Class Form1 Private xmlFile As String = Application.CommonAppDataPath & "\DataTest.xml" Private binFile As String = Application.CommonAppDataPath & "\DataTest.bin" Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load Stop Dim a As New Class1("ABC", 123456789) Dim b As New Class1("EDF", 987654321) a.SaveXml(xmlFile) b.SaveBin(binFile) Stop Dim x As Class1 = Nothing Dim y As Class1 = Nothing ' Überzeugen Sie sich im Debugger, dass vorher die Variablen leer sind, ' und nachher gültige Objekte enthalten. Nämlich Klone der Objekte, die ' gespeichert wurden. Da die Anwendung nur zum Testen ist, ist eine ' weitere "Ergebnis-Anzeige" nicht implementiert. Stop x.LoadXml(xmlFile) y.LoadBin(binFile) Stop End Sub End Class ' ############################################################################## ' ################################ SaveLoad.vb ################################# ' ############################################################################## Imports System.Runtime.CompilerServices Imports System.Runtime.Serialization.Formatters.Binary <HideModuleName()> Public Module SaveLoad <Extension()> Public Sub SaveXml(Of T)(ByVal obj As T, ByVal file As String) Using fs As New IO.FileStream(file, IO.FileMode.OpenOrCreate) Dim xmlSer As New Xml.Serialization.XmlSerializer(GetType(T)) xmlSer.Serialize(fs, obj) fs.Flush() End Using End Sub <Extension()> Public Sub LoadXml(Of T)(ByRef obj As T, ByVal file As String) Using fs As New IO.FileStream(file, IO.FileMode.OpenOrCreate) Dim xmlSer As New Xml.Serialization.XmlSerializer(GetType(T)) obj = DirectCast(xmlSer.Deserialize(fs), T) End Using End Sub <Extension()> Public Sub SaveBin(Of T)(ByVal obj As T, ByVal file As String) Using fs As New IO.FileStream(file, IO.FileMode.OpenOrCreate) Dim bf As New BinaryFormatter bf.Serialize(fs, obj) fs.Flush() End Using End Sub <Extension()> Public Sub LoadBin(Of T)(ByRef obj As T, ByVal file As String) Using fs As New IO.FileStream(file, IO.FileMode.OpenOrCreate) Dim bf As New BinaryFormatter obj = DirectCast(bf.Deserialize(fs), T) End Using End Sub End Module
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.