Firoso
Firoso

Reputation: 6685

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

Upvotes: 3

Views: 579

Answers (1)

John Saunders
John Saunders

Reputation: 161821

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.

Upvotes: 5

Related Questions