none
Serialisieren RRS feed

  • Frage

  • Hallo,
     
    ich serialisiere eine Klasse und müsste folgende Zeilen als erste heraus
    bekommen:
     
    <?xml version="1.0" encoding="utf-8" standalone="yes"?>
    <?Creator company="MyCompany" unique="true"?>
    <?Created date="2013-05-23 10:30:19"?>
     Die erste Zeile ist natürlich kein Problem, aber wie bekomme ich die beiden
    anderen Zeilen?
     
    ich serialisiere mit dieser Funktion:
     
    Public Sub Serialize(fileName As String)
     
    Dim serializer As XmlSerializer = New XmlSerializer(GetType(KBL_container))
     
    Dim writer As StreamWriter = New StreamWriter(fileName, False, New
    Text.UTF8Encoding)
     
    serializer.Serialize(writer, Me)
     
    writer.Close()
     
    End Sub
     
     
    Montag, 27. Mai 2013 16:19

Antworten

  • Hi,
    h
    ier mal eine Demo:

    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Serialization
    
    Module Module1
    
      Sub Main()
        Dim c As New KBL_container
        c.Serialize("c:\temp\x.xml")
        Console.WriteLine(My.Computer.FileSystem.ReadAllText("c:\temp\x.xml"))
        Console.ReadKey()
      End Sub
    
    End Module
    
    Public Class KBL_container
    
      Public Sub Serialize(fileName As String)
        Dim ms As New IO.MemoryStream
        Dim sb As New Text.StringBuilder
        Dim serializer As XmlSerializer = New XmlSerializer(GetType(KBL_container))
        Using str As New StreamWriter(fileName, False, New Text.UTF8Encoding)
          Using writer As New XmlTextWriter(str)
            writer.WriteProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8"" standalone=""yes""")
            writer.WriteProcessingInstruction("Creator", "company=""MyCompany"" unique=""true""")
            writer.WriteProcessingInstruction("Created", "date=""2013-05-23 10:30:19""")
            serializer.Serialize(writer, Me)
          End Using
        End Using
      End Sub
    
    End Class
    

    --
    Viele Gruesse
    Peter

    Montag, 27. Mai 2013 18:34

Alle Antworten

  • Hi,
    h
    ier mal eine Demo:

    Imports System.IO
    Imports System.Xml
    Imports System.Xml.Serialization
    
    Module Module1
    
      Sub Main()
        Dim c As New KBL_container
        c.Serialize("c:\temp\x.xml")
        Console.WriteLine(My.Computer.FileSystem.ReadAllText("c:\temp\x.xml"))
        Console.ReadKey()
      End Sub
    
    End Module
    
    Public Class KBL_container
    
      Public Sub Serialize(fileName As String)
        Dim ms As New IO.MemoryStream
        Dim sb As New Text.StringBuilder
        Dim serializer As XmlSerializer = New XmlSerializer(GetType(KBL_container))
        Using str As New StreamWriter(fileName, False, New Text.UTF8Encoding)
          Using writer As New XmlTextWriter(str)
            writer.WriteProcessingInstruction("xml", "version=""1.0"" encoding=""utf-8"" standalone=""yes""")
            writer.WriteProcessingInstruction("Creator", "company=""MyCompany"" unique=""true""")
            writer.WriteProcessingInstruction("Created", "date=""2013-05-23 10:30:19""")
            serializer.Serialize(writer, Me)
          End Using
        End Using
      End Sub
    
    End Class
    

    --
    Viele Gruesse
    Peter

    Montag, 27. Mai 2013 18:34
  •  "Peter Fleischer [MVP]" schrieb
     
    > hier mal eine Demo:
     
    OK Danke - läuft!
     
    Kleines Problem am Rand: Bei meiner Version habe ich bei der Anzeige im
    Texteditor einen Zeilenumbruch nach jeder "xml-Zeile".
     
    Bei Deiner Version ist das komplette xml in einer Zeile. Woran liegt das -
    kann man das ändern - muss man das ändern?
     
    Danke
     
     
    Dienstag, 28. Mai 2013 11:46
  • writer.Formatting = Formatting.Indented
    ... löst das Problem
     
     
    Dienstag, 28. Mai 2013 11:59
  • Bei Deiner Version ist das komplette xml in einer Zeile. Woran liegt das - kann man das ändern - muss man das ändern?

    Nebenbei, XML ist es relativ egal, wo Zeilenvorsprünge, Tabs oder Leerzeichen sind. Die Reader übergehen die AFAIK einfach, ignorieren also jeden Whitespace zwischen den Tags. Das dient alles nur dem menschlichen Bedürfnis nach Lesbarkeit. :-)

    LG, Dennis.

    Mittwoch, 29. Mai 2013 08:54