14 Stimmen

Wie serialisiere ich ein XML ohne unnötige Leerzeichen und Zeilenumbrüche (.NET)?

Ich benutze XmlSerializer.Serialize und es entstehen Zeilenumbrüche und unnötige Leerzeichen. Wie kann man das vermeiden?

26voto

Steve Guidi Punkte 19012

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);
    }
}

3voto

John Saunders Punkte 159011

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>

0voto

Sielu Punkte 1002

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X