Fehler bei Deserialisierung eines Objekts

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Fehler bei Deserialisierung eines Objekts

    Hallo,
    ich hab auch mal wieder eine Frage, nämlich:

    Ich habe folgende Klasse:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Serializable()> Public Class ListViewItemSpecial
    2. Inherits ListViewItem
    3. Dim Objekt As Projekt
    4. Public Function getProjekt() As Projekt
    5. Return Objekt
    6. End Function
    7. Public Sub setProjekt(ByVal obj As Projekt)
    8. Objekt = obj
    9. End Sub
    10. End Class
    Diese ist einfach nur dazu da, in ein ListViewItem ein Objekt der Klasse Projekt zu speichern um besser darauf zugreifen zu können.

    Da eine ListView nicht direkt serialisierbar ist, hab ich mir zum speichern folgendes überlegt:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Function saveEverything() As Boolean
    2. Try
    3. Dim obj As New List(Of ListViewItemSpecial)
    4. For Each item As ListViewItemSpecial In ListView1.Items
    5. obj.Add(item)
    6. Next
    7. Dim bf As New BinaryFormatter
    8. bf.Serialize(New FileStream(FilePath, FileMode.Create), obj)
    9. Return True
    10. Catch ex As Exception
    11. Return False
    12. End Try
    13. End Function
    Das funktioniert auch wunderbar.

    Will ich das ganze aber wieder laden:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Function loadEverything() As Boolean
    2. If Not IO.File.Exists(FilePath) Then
    3. Return False
    4. End If
    5. Try
    6. Dim obj As New List(Of ListViewItemSpecial)
    7. Dim bf As New BinaryFormatter
    8. obj = CType(bf.Deserialize(New FileStream(FilePath, FileMode.Open)), List(Of ListViewItemSpecial))
    9. For Each item In obj
    10. ListView1.Items.Add(item)
    11. Next
    12. Return True
    13. Catch ex As Exception
    14. MsgBox(ErrorToString)
    15. Return False
    16. End Try
    17. End Function
    wird folgender Fehler ausgegeben:
    "Der für die Deserialisierung eines Objekts mit dem Typ "Backupper.ListViewItemSpecial" erforderliche Konstruktor wurde nicht gefunden."

    Was das jetzt bedeuten soll, weiß ich nicht. Als der Fehler das erste mal vorkam, hab ich den Konstruktor rausgenommen, ohne irgendeine Wirkung.

    Mfg,
    Kilian
    Schmeiß das

    Kilian_98 schrieb:

    ListView
    raus.
    Nimm ein DataGridView und eine DataTable, pack in die DataTable Deine Daten, hänge dieses als DataSource an das DataGridView und speichere es per datatable.WriteXml(PFAD) und lade es per datatable.ReadXml(PFAD).
    Feddich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!