[XML Serializer] Zeilenumbruch wird falsch umgesetzt

Klein0r

Erfahrenes Mitglied
Hallo zuasmmen.

Ich hoffe ich bin mit dem Thema im richtigen Forum. Könnte genauso gut in Handy, PDA (wegen der Kommunikation mit solch einem Gerät) oder in .NET Kommunikation. Bitte verschieben falls ich hier falsch bin!

Also:
Ich serialisiere mit dem XML-Serialzer ein Objekt. Dieses enthalt ausschließlich Strings als Attribute. Nun enthalten mehrere dieser Strings Zeilenumbrüche. Leider werden diese auf der anderen Seite (Windows CE) nicht richtig übersetzt.

Das wirkt sich folgendermaßen aus:
Ich sende:
Code:
"a" & ControlChars.CrLf & "a"
Das ganze wird auch wunderbar in ein Byte-Array gewandelt und über das Netz geschickt. Auf der anderen Seite angekommen und Deserialisiert kann ich allerdings kein CrLf mehr finden, sondern nurnoch einen Lf.

Nun dachte ich, statt die Zeilenumbrüche direkt zu senden, nutze ich diese htmlentities (weiß nich ob die hier auch so heißen):
Code:
    Private Function replaceForXML(ByVal str As String) As String
        Return str.Replace(ControlChars.CrLf, "
")
    End Function
Der lustige Effekt: Das & der einzelnen Anweisungen wird in & gewandelt. Dadurch wird natürlich wieder nur müll Übertragen und kein Zeilenumbruch.

Wie bekomme ich es hin, dass der CrLf auch einer bleibt?
Werde das noch genauer untersuchen an welcher Stelle es hapert...

Aber eventuell hat mit den bisherigen Infos ja schon jemand eine Idee?

Gruß
 
Hi.

Laut XML Standard wird das Zeilenende in XML Dokumenten durch das Zeichen LF markiert. Da hat sich diesmal sogar Microsoft dran gehalten. ;)

D.h. wenn ein XML Parser ein Dokument liest, dann werden automatisch alle anderen Zeilenendemarkierungen (CR bzw. CRLF) im Zuge der Normalisierung in LF konvertiert.

Wie man CharEntities in XML Dokumente einfügt, hatten wir ja schonmal => http://www.tutorials.de/forum/net-d...-xmltextwriter-problem-mit-html-entities.html

Gruß
 
Achso - na das erklärt einiges. Danke ;)

Das mit den CharEntities ist so eine Sache. Ich habe ja ein Objekt, welches ich mit dem XMLSerializer in eine XML-Struktur wandel. Daher müsste ich dem das ja irgendwie mitgeben das er nen Zeilenumbruch automatisch umwandelt?

Oder ich machs noch anders und bastel mir die CrLf aus den Lf in den einzelnen Strings wieder zusammen. Das wär sicher die schnellste methode?

Gibts auch eine Möglich über Annotations (ka wie die bei Microsoft heißen) den einzelnen Properties informationen zu der XML-Serialisierung bezüglich Zeilenumbrüchen mitzugeben?

Gruß
 
Oder ich machs noch anders und bastel mir die CrLf aus den Lf in den einzelnen Strings wieder zusammen. Das wär sicher die schnellste methode?
Das wäre sicherlich das einfachste.
Gibts auch eine Möglich über Annotations (ka wie die bei Microsoft heißen) den einzelnen Properties informationen zu der XML-Serialisierung bezüglich Zeilenumbrüchen mitzugeben?
Nein, für Zeilenumbrüche gibt es keine Option bei den .NET XML Serialisierungs-Attributen. Aber du könntest versuchen die Daten in eine CDATA Sektion zu speichern. Siehe z.B. http://geekswithblogs.net/cmartin/archive/2005/11/30/61705.aspx

Gruß
 
Danke für den Tipp mit dem CDATA.
Hatte ich auch schon überlegt - aber irgendwie hab ich da nix zu gefunden.

Werd ich Dienstag morgen direkt probieren - heut komm ich da nicht mehr zu ;)

Gruß und schonmal frohe Ostern
 
Damti das Thema hier auch abgehakt wird.
Einfach im String die Lf durch CrLf ersetzen.
So funktionierts bei mir auf jeden fall ;)

Ohne CDATA - was aber sicher auch ne Lösung wär...
Code:
textbox.text = stringAusXML.Replace(ControlChars.Lf, ControlChars.CrLf)
 
Zurück