XmlSerializer

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Memo.

    XmlSerializer

    Hallo,
    Ich habe irgendwie ein komisches Problem, das sich nicht per Debugger lösen lässt:
    Ich habe einen XmlSerializer der Daten (eigene Klasse) serialisieren sollte.
    Dazu benutze ich folgenden Code (leicht abgeändert :P )

    VB.NET-Quellcode

    1. Public Function SaveInFile(ByVal Setting As MeinTyp, ByVal File As String) As XDocument
    2. Dim fs As New FileStream(File, FileMode.Create)
    3. Dim ser As New XmlSerializer(GetType(MeinTyp))
    4. ser.Serialize(fs, Setting)
    5. fs.Close()
    6. Return XDocument.Load(File)
    7. End Function

    MeinTyp schaut so aus:

    VB.NET-Quellcode

    1. Public Class MeinTyp
    2. Enum ShowingType
    3. Design_Gerbe
    4. Design_Red
    5. Design_Yellow
    6. Design_User
    7. End Enum
    8. Public SelectedRows As List(Of Integer)
    9. Public View As ShowingType
    10. Public Sub New()
    11. End Sub
    12. End Class


    Durch den Aufruf der SaveInFile-Methode:

    VB.NET-Quellcode

    1. SaveInFile(New MeinTyp(), Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Hallo.txt")

    wird zwar eine Datei erstellt, die aber ziemlich leer ist :cursing:
    Der Debugger springt bei

    VB.NET-Quellcode

    1. Dim ser As New XmlSerializer(GetType(MeinTyp))

    aus, keine Fehlermeldung, nichts.
    Das Fenster wird angezeigt, der Theard arbeitet nichts, alles ist ok.
    In der Ausgabe wird nur:

    Quellcode

    1. Eine Ausnahme (erste Chance) des Typs "System.InvalidOperationException" ist in System.Xml.dll aufgetreten.

    angezeigt. ;(

    Memo schrieb:

    wird zwar eine Datei erstellt, die aber ziemlich leer ist

    hmm, was heisst denn bei Dir ziemlich leer und was erwartest Du als Output ?

    Von der Klasse her würde ich erwarten:
    - enum ShowingType wird nicht serialisiert , da Enumerations zum Typ und nicht der INstanz gehören (Constants,Static)
    - Selected Rows wird nicht serialisiert da Nothing, es fehlt ein New
    - View sollte allerdings serialisiert werden, keine Ahnung mit welchem Initialwert, vermutlich Design_Gerbe
    habs versucht mit:

    VB.NET-Quellcode

    1. Dim sett As New MeinTyp()
    2. sett.View = MeinTyp.ShowingType.Design_Red
    3. sett.SelectedRows = New List(Of Integer)(New Integer(){0,4,7})
    4. SaveInFile(sett, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Hallo.txt")

    Hallo.txt ist genauso leer wie vorher.
    Hallo Memo, kurz mal in Visual Studio kopiert (Framework 3.5):

    Code

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Xml.Serialization
    4. Imports System.Xml.linq
    5. Public Class Form1
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. Dim sett As New MeinTyp()
    8. sett.View = MeinTyp.ShowingType.Design_Red
    9. sett.SelectedRows = New List(Of Integer)(New Integer() {0, 4, 7})
    10. SaveInFile(sett, Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Hallo.txt")
    11. End Sub
    12. Public Function SaveInFile(ByVal Setting As MeinTyp, ByVal File As String) As XDocument
    13. Dim fs As New FileStream(File, FileMode.Create)
    14. Dim ser As New XmlSerializer(GetType(MeinTyp))
    15. ser.Serialize(fs, Setting)
    16. fs.Close()
    17. Return XDocument.Load(File)
    18. End Function
    19. End Class
    20. Public Class MeinTyp
    21. Enum ShowingType
    22. Design_Gerbe
    23. Design_Red
    24. Design_Yellow
    25. Design_User
    26. End Enum
    27. Public SelectedRows As List(Of Integer)
    28. Public View As ShowingType
    29. Public Sub New()
    30. End Sub
    31. End Class


    XML

    XML-Quellcode

    1. <?xml version="1.0"?>
    2. <MeinTyp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    3. <SelectedRows>
    4. <int>0</int>
    5. <int>4</int>
    6. <int>7</int>
    7. </SelectedRows>
    8. <View>Design_Red</View>
    9. </MeinTyp>


    Funktioniert wie es soll.