XML Serialization

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    XML Serialization

    Hallo,

    habe ein Problem mit meiner XML Serialization... Momentan wird meine XML jedesmal überschrieben.

    Dim serializer As New XmlSerializer(GetType(Log))

    Dim writer As XmlTextWriter = New XmlTextWriter("path", Encoding.Unicode)
    serializer.Serialize(writer, LogForm)
    writer.Close()

    Wie bekomme ich es hin, das jedesmal ein neuer Eintrag angefügt wird?


    LG FG
    Hallo,

    wenn du die XML-Datei aufbereiten möchtest damit diese von einem anderen Programm weiterverarbeitet werden kann, solltest du dir eventuell LINQtoXML ansehen, weil das eigentlich alles bieten sollte was du hierfür benötigst.

    Wenn du allerdings die Daten für dieses eine Programm serialisieren willst bzw. für eines deiner anderen Programme, dann solltest du dir, die entsprechenden Objekte anlegen und diese beim Start durch Deserialisierung in den Speicher laden und beim Beenden wieder zurück in die Datei serialisieren.

    Da sicher mehrere dieses Problem haben, stelle ich hier mal einen Beispielcode zur Verfügung:

    Achtung: Nicht zu empfehlen für große Datenmengen, da mit dieser Methode jedes mal, alle Daten in den Arbeitsspeicher geladen werden müssen.
    Wichtig: Diese Methode dient vor allem zum Speichern von Objekten die zur Laufzeit hinuzugefügt werden, um diese nach einem Neustart weiter verwenden zu können!

    Spoiler anzeigen

    VB.NET-Quellcode

    1. 'Wird zur Serialisierung benötigt
    2. Imports System.Xml.Serialization
    3. 'Wird zum Öffnen der Datei benötigt
    4. Imports System.IO
    5. ''' <summary>
    6. ''' Erstellt eine Liste vom Objekt "Person". Durch das Attribut "Serializable()" kann die Liste serialisiert werden.
    7. ''' </summary>
    8. ''' <remarks></remarks>
    9. <Serializable()> _
    10. Public Class personen
    11. Inherits List(Of person)
    12. End Class
    13. ''' <summary>
    14. ''' Das Objekt "Person" enthält alle Angaben zu einer Person.
    15. ''' </summary>
    16. ''' <remarks></remarks>
    17. <Serializable()> _
    18. Public Class person
    19. Public Property ID As Integer
    20. Public Property Name As String
    21. Public Property Alter As Integer
    22. Public Sub New()
    23. ID = 0
    24. Name = String.Empty
    25. Alter = 0
    26. End Sub
    27. 'Definiert was beim Neuerstellen des Objektes angegeben werden muss
    28. Public Sub New(ByVal sName As String, ByVal iAlter As Integer, ByVal iID As Integer)
    29. Name = sName
    30. Alter = iAlter
    31. ID = iID
    32. End Sub
    33. End Class
    34. Public Class Form1
    35. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    36. 'Zuerst erstellen wir eine Objekt vom Typ "Personen", welches 3 Objekte vom Typ "Person" enthält
    37. Dim personenliste As New personen From {New person("Franz", 20, 1),
    38. New person("Markus", 23, 2),
    39. New person("Maria", 18, 3)}
    40. 'Nun lassen wir uns die Anzahl an Personen in der Liste ausgeben.
    41. MsgBox(personenliste.Count)
    42. 'Hier wird das Objekt "Personenliste" und alle darin enthaltenen Objekte in eine Datei serialisiert.
    43. XMLSerialize(Of personen)(personenliste, "c:\test.xml")
    44. 'Nun löschen wir die Liste und überprüfen dies mit der Ausgabe der Anzahl an Objekten, die darin enthalten ist.
    45. personenliste.Clear()
    46. MsgBox(personenliste.Count)
    47. 'Hier laden wir die Daten wieder aus der Datei, zurück in das Objekt (Deserialisieren) und lassen uns zur Überprüfung wieder die Anzahl ausgeben.
    48. personenliste = XMLDeserialize(Of personen)("c:\test.xml")
    49. MsgBox(personenliste.Count)
    50. 'Beendet die Ausführung
    51. End
    52. End Sub
    53. ''' <summary>
    54. ''' Serialisiert ein Objekt in eine XML-Datei
    55. ''' </summary>
    56. ''' <typeparam name="T">Gibt den TYP des Objektes an</typeparam>
    57. ''' <param name="Obj">Das zu serialisierende Objekt</param>
    58. ''' <param name="FileName">Die Datei in der das Objekt gespeichert werden soll</param>
    59. ''' <remarks></remarks>
    60. Public Sub XMLSerialize(Of T)(ByVal Obj As Object, ByVal FileName As String)
    61. Dim XML As New XmlSerializer(GetType(T))
    62. Dim FS As New FileStream(FileName, FileMode.Create)
    63. XML.Serialize(FS, Obj)
    64. FS.Close()
    65. End Sub
    66. ''' <summary>
    67. ''' Deserialisiert ein Objekt aus einer XML-Datei
    68. ''' </summary>
    69. ''' <typeparam name="T">Gibt den TYP des Objektes an</typeparam>
    70. ''' <param name="FileName">Die Datei aus der das Objekt geladen werden soll</param>
    71. ''' <returns>Gibt das zu deserialisierende Objekt zurück</returns>
    72. ''' <remarks></remarks>
    73. Public Function XMLDeserialize(Of T)(ByVal FileName As String) As T
    74. Dim XML As New XmlSerializer(GetType(T))
    75. Dim fs As New FileStream(FileName, FileMode.Open)
    76. Dim obj As T
    77. obj = XML.Deserialize(fs)
    78. fs.Close()
    79. Return obj
    80. End Function
    81. End Class


    Ich hoffe ich konnte weiterhelfen

    Mfg
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D