Ich benutze XmlSerializer.Serialize und es entstehen Zeilenumbrüche und unnötige Leerzeichen. Wie kann man das vermeiden?
Antworten
Zu viele Anzeigen?Vielleicht könnten Sie die Überladung verwenden, die eine XmlWriter
und konfigurieren Sie die angegebene XmlWriter
mit einer XmlWriterSettings
Instanz?
XmlWriterSettings
ermöglicht es Ihnen, die Anwendung von Zeilenumbrüchen und Einrückungen zu steuern.
void Serialize(Object o)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = false;
settings.NewLineHandling = NewLineHandling.None;
//settings.OtherProperties = values;
using (XmlWriter writer = XmlWriter.Create(CreateStream(), settings))
{
_serializer.Serialize(writer, o);
}
}
Das ist interessant, ich dachte, es gäbe standardmäßig keine Formatierung. Ich habe gerade das Folgende versucht und keine Formatierung erhalten:
using (var stream = new MemoryStream())
{
System.Text.Encoding encoding;
using (var writer = XmlWriter.Create(stream))
{
if (writer == null)
{
throw new InvalidOperationException("writer is null");
}
encoding = writer.Settings.Encoding;
var ser = new XmlSerializer(obj.GetType());
ser.Serialize(writer, obj);
}
stream.Position = 0;
using (var reader = new StreamReader(stream, encoding, true))
{
return reader.ReadToEnd();
}
}
in einem Probelauf die folgende XML-Datei zurück:
<?xml version="1.0" encoding="utf-8"?><obj xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><childOne /><childTwo /><text>text1</text><text>text2</text></obj>
Bitte prüfen Sie auch, ob die serialisierten Klassen Elemente vom XML-Typ (wie XmlElement) enthalten. Ich habe das Tool Xsd2Code verwendet, um Klassen aus XSD zu generieren, und (in einem sehr speziellen Fall) hat es einen Member vom Typ XmlElement erstellt. Während der Serialisierung hatte dieses Element seine eigene Formatierung (genauer gesagt eine Identifizierung). Selbst wenn ich XmlSerializer Einrückung aktiviert (oder deaktiviert) hatte es keine Auswirkungen auf die XmlElement-Mitglied.