XML-Deserialisierung 'Standardisierung' Zeilenenden, wie um es zu stoppen? (.NET)
Ich habe eine Klasse mit einer Eigenschaft gekennzeichnet mit [XmlText]
, das akzeptiert mehrzeilige Eingabe. In meiner XML-Datei habe ich überprüft, dass die Zeilenenden innerhalb der text-Inhalt sind infact "\r\n"
, das gleiche wie der rest der Datei.
Den code, den ich verwende, um zu Deserialisieren ist:
XmlSerializer configSerializer = new XmlSerializer(typeof(WorldList));
string file = "test.xml";
if (File.Exists(file))
{
using (TextReader r = new StreamReader(file))
{
foo = configSerializer.Deserialize(r);
}
}
Aber innerhalb der Set-Methode für die [XmlText]
Eigenschaft value
bereits "\n"
als Zeilenende. Der wichtigste Grund ist dies ärgerlich ist, weil "\n"
Zeilenenden nicht richtig angezeigt in einem TextBox
... ich bin mir nicht genau sicher, welcher Teil verursacht die Probleme, aber ich dachte, jemand hier möglicherweise in der Lage sein, etwas Licht auf die situation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich den Beispielcode ändern, um es einfacher zu machen, schnell den code in eine C# Entwicklungsumgebung. Ich habe auch absichtlich nicht mit Aussagen - es ist nur Beispielcode.
Für das Beispiel haben wir die Folgen Klasse, die wir wollen, zu serialisieren:
Wenn wir versuchen, zu serialisieren und Deserialisieren dies in der Art, die Sie beschreiben, zu der Zeile, wo "Gleiche" wird gedruckt wird nicht durchgeführt (ich gehe davon aus, dass der code ausgeführt wird, auf Windows mit der Umwelt.Neue-Zeile-ersetzen durch "\r\n" wenn Sie nicht):
Aber dies kann behoben werden, indem manuell zuweisen eines XmlTextReader-zu dem serializer, mit der Normalisierung Eigenschaft auf false gesetzt (die, die standardmäßig verwendet der serializer ist auf true gesetzt):
Gleiche wird nun Druck aus, die, es sei denn, ich bin falsch, ist das Verhalten, die Sie benötigen?
Wenn Sie serialisieren, dann
XmlWriterSettings.NewLineHandling
(Replace
) wäre einen Versuch Wert - aber das wird nicht helfen, Lesen. Ein bisschen schmuddelig, aber vielleicht tun Sie dies direkt in den setter: