Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to serialize a XML without unnecessary spaces and line breaks? (.NET)

I'm using XmlSerializer.Serialize, and it produces line breaks and unnecessary spaces. How to avoid it?

like image 486
Jader Dias Avatar asked Jul 16 '09 17:07

Jader Dias


2 Answers

Perhaps you could use the overload accepting an XmlWriter, and configure the given XmlWriter with an XmlWriterSettings instance?

XmlWriterSettings allows you to control the application of line breaks and indentation.

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);
    }
}
like image 85
Steve Guidi Avatar answered Oct 20 '22 00:10

Steve Guidi


It's interesting, I thought there was no formatting by default. I just tried the following and got no formatting:

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 a sample run, it returned the following XML:

<?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>
like image 27
John Saunders Avatar answered Oct 19 '22 23:10

John Saunders