Serialisierung: System.InvalidOperationException

  • VB.NET
  • .NET (FX) 4.0

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Serialisierung: System.InvalidOperationException

    Hallo Leute,

    ich habe folgendes Problem beim Serialisieren einer Klasse: Ich bekomme beim Initialsisieren des XmlSerializer immer folgenden Fehler:

    Quellcode

    1. Ein Ausnahmefehler des Typs "System.InvalidOperationException" ist in System.Xml.dll aufgetreten.
    2. Zusätzliche Informationen: Fehler beim Reflektieren des Typs 'WebBookCreator.Book'.


    Mein Code zum Serialisieren

    VB.NET-Quellcode

    1. Dim book As New Book
    2. Private Sub TsbSave_Click(sender As Object, e As EventArgs) Handles TsbSave.Click
    3. Dim ofd As New OpenFileDialog
    4. Dim xml As New Xml.Serialization.XmlSerializer(book.GetType)
    5. If ofd.ShowDialog = DialogResult.OK Then
    6. Using fs As New IO.FileStream(ofd.FileName, IO.FileMode.Create)
    7. xml.Serialize(fs, book)
    8. fs.Close()
    9. End Using
    10. End If
    11. ofd.Dispose()
    12. End Sub

    Die Klasse book

    VB.NET-Quellcode

    1. <Serializable>
    2. Public Class Book
    3. Dim _Title As String
    4. Dim _Autor As String
    5. Dim _Chapters As New List(Of Chapter)
    6. Property Title() As String
    7. Get
    8. Return _Title
    9. End Get
    10. Set(value As String)
    11. _Title = value
    12. End Set
    13. End Property
    14. Property Autor As String
    15. Get
    16. Return _Autor
    17. End Get
    18. Set(value As String)
    19. _Autor = value
    20. End Set
    21. End Property
    22. Property Chapters As List(Of Chapter)
    23. Get
    24. Return _Chapters
    25. End Get
    26. Set(value As List(Of Chapter))
    27. _Chapters = value
    28. End Set
    29. End Property
    30. Sub New()
    31. End Sub


    Kennt jemand da eine Lösung und kann mich etwas weiter bringen?
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    Prinzipiell genau gleich:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. <Serializable>
    2. Public Class Chapter
    3. Dim _headline As String
    4. Dim _text As String
    5. Property headline As String
    6. Get
    7. Return _headline
    8. End Get
    9. Set(value As String)
    10. _headline = value
    11. End Set
    12. End Property
    13. Property text As String
    14. Get
    15. Return _text
    16. End Get
    17. Set(value As String)
    18. _text = value
    19. End Set
    20. End Property
    21. ''' <summary>
    22. ''' A chapter
    23. ''' </summary>
    24. Sub New(ByVal headline As String, ByVal text As String)
    25. Me.headline = headline
    26. Me.text = text
    27. End Sub
    28. End Class


    Nach Google habe aber nicht nur ich dieses Problem und leider keiner eine Lösung :(
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    Die Klasse Chapter hat keinen parameterlosen Konstruktur, was jedoch vorausgesetzt wird.

    Nebenbei würde ich dir auch empfehlen, innerhalb der Klasse die Modifier anzugeben, da es um einiges übersichtlicher wird.
    Properties in deinem Fall Public und anstatt Dim der internen Variablen Private oder Protected falls du diese in Subklassen benötigst. Sub New auch Public.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    Die Klasse Chapter hat keinen parameterlosen Konstruktur, was jedoch vorausgesetzt wird.


    Funktioniert, wenn man einen hinzufügt. Habe nicht gewusst, dass das notwendig ist. Danke!
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    Für dich ja, für jemanden der einfach mal drauf los programmiert hat, ohne Vorkenntnisse zu Serialisieren zu haben frage ich mich, wie ich es überhaupt so weit geschafft habe.
    Nein, die InnerException habe ich mir nicht angeschaut.
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21
    Habe den Fehler reproduziert. Da wäre es drinnen gestanden. Ich habe an die gar nicht gedacht... Aber fürs nächste mal weiß ich beides: InnerException und parameterloser Konstruktor

    Danke!
    Alle Angaben sind ohne Gewähr, jedoch mit Pistole. Glücksspiel, Drogen und leckeres Essen können süchtig machen.

    43232069737420636f6f6c21

    masterm schrieb:

    VB.NET-Quellcode

    1. Dim _headline As String
    2. Property headline As String
    3. Get
    4. Return _headline
    5. End Get
    6. Set(value As String)
    7. _headline = value
    8. End Set
    9. End Property
    Ich denke mal, dass in Deiner XML-Datei sowohl _headline als auch_headline auftaucht.
    machst Du einfach

    VB.NET-Quellcode

    1. Public Property headline As String
    und analog mit allen anderen Properties.
    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!