XML-Schnittstelle (Serialisierung)

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

      XML-Schnittstelle (Serialisierung)

      Hallo Leute,

      da für die Kommunikation mit Webshop-Systemen,
      Datenübertragung zu Logistikunternehmen, etc. sehr häufig
      XML-Schnittstellen benötigt werden und ich in einem anderen Thread
      gerade einen Beitrag dazu verfasst habe, habe ich ein kleines Tutorial
      für euch geschrieben.

      Zunächst einmal habe ich schon sehr häufig
      gesehen, dass XML-Dokumente einzelnd aufgebaut werden. Dazu gleich
      vorweg: XML schreibt man nicht sondern man serialisiert XML-Dateien.

      Hierfür
      benötigt ihr zunächst eine serialisierbare Datenklasse. In unserem
      Beispiel eine vereinfachte DataModell-Klasse, welche die Daten eines
      Artikels beinhaltet:

      Serialisierbare Klasse

      VB.NET-Quellcode

      1. Imports System.Xml.Serialization
      2. <Serializable>
      3. Public Class Mitarbeiter
      4. <XmlElement(ElementName:="Personalnummer")>
      5. Public Property Personalnummer As Integer
      6. <XmlElement(ElementName:="Vorname")>
      7. Public Property Vorname As String
      8. <XmlElement(ElementName:="Nachname")>
      9. Public Property Nachname As String
      10. <XmlElement(ElementName:="Geburtsdatum")>
      11. Public Property Geburtsdatum As Date
      12. End Class


      Wir wechseln danach in unsere Klasse in der wir Mitarbeiter verarbeiten und setzen auch hier im Imports:
      Imports

      VB.NET-Quellcode

      1. Imports System.Xml.Serialization
      2. Imports System.IO
      3. Imports System.Text



      Als
      nächstes erstellen wir uns eine serialisierbare Liste dieser Objekte
      wahlweise in unserer Form oder der Klasse wo sie benötigt wird:

      Mitarbeiterliste

      VB.NET-Quellcode

      1. <XmlArray("Mitarbeiterliste")>
      2. Private Mitarbeiterliste As New List(of Mitarbeiter)
      3. Private Filename As String = "C:\Temp\Test.xml"



      Für die Einsteiger unter uns hier nochmal die Initialisierung eines Objektes:

      Objektinitialisierung

      VB.NET-Quellcode

      1. Dim MA As New Mitarbeiter With {
      2. .Personalnummer = 1
      3. .Vorname = "Max"
      4. .Nachname = "Mustermann"
      5. .Geburtsdatum = New Date (2019,1,1)
      6. }



      Als nächstes benötigen wir zwei Methoden zum verarbeiten der XML (lesen und schreiben)

      Methoden zum Verarbeiten

      VB.NET-Quellcode

      1. Private Sub Write()
      2. If File.Exists(Filename) Then
      3. File.Delete(Filename)
      4. End If
      5. If Mitarbeiterliste is Nothing
      6. Mitarbeiterliste = New List(of Mitarbeiter)
      7. End If
      8. Dim Serializer As XmlSerializer = New XmlSerializer(Mitarbeiterliste.GetType)
      9. Dim XStream As StreamWriter
      10. Dim EmptyNamespace As New XmlSerializerNamespaces()
      11. EmptyNamespace.Add("", "")
      12. Using FileStream As New FileStream(Filename, FileMode.Create)
      13. XStream = New StreamWriter(FileStream, Encoding.UTF8)
      14. Serializer.Serialize(XStream, Mitarbeiterliste, EmptyNamespace)
      15. FileStream.Close()
      16. End Using
      17. End Sub
      18. Private Sub Read()
      19. If Mitarbeiterliste Is Nothing Then
      20. Mitarbeiterliste = New List(Of Mitarbeiter)
      21. End If
      22. Dim Serializer As XmlSerializer = New XmlSerializer(Mitarbeiterliste.GetType)
      23. Dim EmptyNamespace As New XmlSerializerNamespaces()
      24. EmptyNamespace.Add("", "")
      25. Using FileStream As New FileStream(Filename, FileMode.Open)
      26. Mitarbeiterliste = Serializer.Deserialize(FileStream)
      27. FileStream.Close()
      28. End Using
      29. End Sub



      Hier noch ein abschließendes Code-Beispiel:

      Code-Beispiel


      Form-Load Event:

      VB.NET-Quellcode

      1. Private Sub Mitarbeiterverwaltung_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      2. Dim MA As New Mitarbeiter With {
      3. .Personalnummer = 1
      4. .Vorname = "Max"
      5. .Nachname = "Mustermann"
      6. .Geburtsdatum = New Date (2019,1,1)
      7. }
      8. Mitarbeiterliste.Add(MA)
      9. End Sub


      ImportButton-Click Event:

      VB.NET-Quellcode

      1. Private Sub btnImport_Click(sender As Object, e As EventArgs) Handles btnImport.Click
      2. If File.Exists(Filename) Then
      3. Read()
      4. End If
      5. End Sub


      ExportButton-Click Event:

      VB.NET-Quellcode

      1. Private Sub btnExport_Click(sender As Object, e As EventArgs) Handles btnExport.Click
      2. If Mitarbeiterliste IsNot Nothing Then
      3. Write()
      4. End If
      5. End Sub



      Edit aufgrund der Anmerkung von @Nofear23m:
      Vielen Dank für deine Nachricht in der Konversation. Damit das ganze auch eine Schnittstelle wird, braucht ihr natürlich die .xsd-Datei der Gegenseite, die das XML-Schema enthält. Aus dieser Schema-Datei könnt ihr die Serialisierbaren Klassen dann autogenerieren. Dies hat den Vorteil, dass die Schnittstelle auf beiden Seiten exakt gleich aufgebaut ist und somit in jedem Fall lauffähig ist.

      Viel Spaß und Erfolg damit! ;)


      Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Yanbel“ ()