Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I ensure that the file output from a DataContractSerializer is a "regularly" formatted XML?

Every time I output XML from a DataContractSerializer, it's a single line XML string. This is valid XML, but it's a pain to read. How can I get additional whitespace added in there to break out elements into tabbed lines?

public void Save(Stream stream)
{
    DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<PlottingDeviceInfo>));
    serializer.WriteObject(stream, this.Devices);
}
like image 513
Firoso Avatar asked Dec 10 '25 14:12

Firoso


1 Answers

Use the WriteObject overload that takes an XmlWriter, then pass it an XmlWriter configured to produce pretty output.

public void Save(Stream stream)
{
    DataContractSerializer serializer = new DataContractSerializer(typeof(ObservableCollection<PlottingDeviceInfo>));
    using (var writer = XmlWriter.Create(stream, new XmlWriterSettings{Indent=true}))
    {
        serializer.WriteObject(writer, this.Devices);
    }
}

When you just use a Stream, WriteObject creates it's own, default XmlWriter. It's the XmlWriter that determines the format, etc.

like image 163
John Saunders Avatar answered Dec 12 '25 09:12

John Saunders



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!