| |
VB.NET - Ein- und UmsteigerListe von abgeleiteten Klassen serialisieren | | | Autor: Hannibal | Datum: 05.09.12 09:50 |
| Hallo,
habe schon wieder ein Problem mit meinem Erinnerungsprogramm. Habe jetzt schon einige Tage gebraucht um den Auslöser zu finden.
Will eine Liste einer Basisklasse serialisieren die ich vorher mit Daten von zwei abgeleiteten Klassen fülle.
Hier ein Beispiel:
Imports System.Collections.ObjectModel
Imports System.Xml.Serialization
Imports System.IO
<Serializable()>
Public Class Erinnerungsliste
Inherits List(Of ErinnerungsBasis)
Sub New()
MyBase.New()
End Sub
Sub XMLSerialize(ByVal Dateiname As String)
Dim locXmlWriter As New XmlSerializer(GetType(Erinnerungsliste))
Dim locXmlDatei As New StreamWriter(Dateiname)
locXmlWriter.Serialize(locXmlDatei, Me)
locXmlDatei.Flush()
locXmlDatei.Close()
Debug.Print("Serialisiert")
End Sub
Public Shared Function XmlDeserialize(ByVal Dateiname As String) As _
Erinnerungsliste
Dim locXmlLeser As New XmlSerializer(GetType(Erinnerungsliste))
Dim locXmlDatei As New StreamReader(Dateiname)
Return CType(locXmlLeser.Deserialize(locXmlDatei), Erinnerungsliste)
Debug.Print("Deserialisiert")
End Function
End Class
Public Class Erinnerung
Inherits ErinnerungsBasis
Sub New()
MyBase.New()
End Sub
End Class
Public Class Geburtstag
Inherits ErinnerungsBasis
Sub New()
MyBase.new()
End Sub
End Class
Public Class Form1
Private locListe As New Erinnerungsliste
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As _
System.EventArgs) Handles Button1.Click
locListe.Add(New Erinnerung With {.Erinnerungstext = "Erinnerung1", _
.Erinnerungsdatum = #5/1/1985#})
locListe.Add(New Geburtstag With {.Erinnerungstext = "Dominik", _
.Erinnerungsdatum = #8/25/1985#})
End Sub
End Class Die Klasse ErinnerungsBasis spar ich mir jetzt erstmal.
Sobald ich die XML Datei speichern will bekommen ich in der Zeile
locXmlWriter.Serialize(locXmlDatei, Me)
eine InvalidOperationException. Wenn ich nur den Typ ErinnerungsBasis zur Liste hinzufüge funktioniert alles problemlos.
Gruß
Hannibal
Beitrag wurde zuletzt am 05.09.12 um 09:52:21 editiert. | |
Re: Liste von abgeleiteten Klassen serialisieren | | | Autor: keco | Datum: 05.09.12 13:51 |
| Deine abgeleiteten Klassen müssen ebenfalls das Serializable-Attribut aufweisen. | |
Re: Liste von abgeleiteten Klassen serialisieren | | | Autor: keco | Datum: 05.09.12 21:17 |
| Huch. Darauf habe ich gar nicht geachtet, dass das mit dem XmlSerializer gemacht wurde. Mein Fehler. | |
Re: Liste von abgeleiteten Klassen serialisieren | | | Autor: Hannibal | Datum: 08.09.12 00:05 |
| Hallo,
@keco: Das habe ich schon probiert, hat leider auch nicht funktioniert.
@DaveS: Danke, jetzt funktioniert es. Habe das so aus den Büchern "Das Entwicklerbuch" von Klaus L., da war überall das <Serializable> Attribut dabei.
Wie soll ich so eine Bibliothek schreiben wenn ich die Liste danach nur mit Klassen verwenden kann, die ich schon vorher definiert habe? In diesem Fall bringt mir das Ableiten einer Basisklasse irgendwie nicht mehr so viel.
Gruß
Hannibal
_____________________________________________________
Programmieren ist heute ein Wettrennen zwischen Programmierern, die versuchen bessere und idiotensicherere Programme zu entwickeln und dem Universum, dass versucht bessere Idioten zu entwickeln | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|
|
|
Copyright ©2000-2024 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
|
|