格式化DataContractSerializer创建的XML

Eri*_*tas 54 c# xml formatting datacontractserializer

有没有一种简单的方法可以让DataContractSerializer吐出格式化的XML而不是一个长字符串?我不想以任何方式更改标签或内容,只是让它添加换行符和缩进以使XML更具可读性?

<tagA>
   <tagB>This is</tagB>   
   <tagC>Much</tagC>
   <tagD>
      <tagE>easier to read</tagE>
   </tagD>
</tagA>


<tagA><tagB>This is</tagB><tagC>Much</tagC><tagD><tagE>harder to read</tagE></tagD></tagA>
Run Code Online (Sandbox Code Playgroud)

Ste*_*ock 88

正如bendewey所说,XmlWriterSettings就是你所需要的 - 例如

var ds = new DataContractSerializer(typeof(Foo));

var settings = new XmlWriterSettings { Indent = true };

using (var w = XmlWriter.Create("fooOutput.xml", settings))
    ds.WriteObject(w, someFoos);
Run Code Online (Sandbox Code Playgroud)


ben*_*wey 19

看看的Indent属性XmlWriterSettings

更新:这是一个很好的链接来自MSDN 如何:在XmlWriter上指定输出格式

另外,这是一个示例:

class Program
{
    static void Main(string[] args)
    {
        var Mark = new Person()
        {
            Name = "Mark",
            Email = "mark@example.com"
        };

        var serializer = new DataContractSerializer(typeof(Person));

        var settings = new XmlWriterSettings()
        {
            Indent = true,
            IndentChars = "\t"
        };

        using (var writer = XmlWriter.Create(Console.Out, settings))
        {
            serializer.WriteObject(writer, Mark);
        }
        Console.ReadLine();
    }
}
public class Person
{
    public string Name { get; set; }
    public string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


dth*_*her 7

在XML文档中调整空格时要小心!调整空格将使XML对我们人类更具可读性,但它可能会干扰机器解析.

根据XML标准,默认情况下空白是重要的.换句话说,就XML而言,空白是内容.

如果将格式良好的XML提供给XML Document对象,则会得到与其中没有空格或换行符的版本不同的结果.您将获得添加到已格式化版本的其他文本节点.

这篇关于XML White Space的 MSDN文章有几个例子,展示了如何处理棘手的空白区域.

如果您仅为人类消费格式化XML,则无关紧要.但是,如果您尝试往返格式化文档,则可能会遇到麻烦.

由于使用DataContractSerializer的主要优点之一是能够无缝地序列化对象和反序列化XML ,因此通常最好不要单独使用丑陋的输出.

我通常将输出粘贴到NotePad ++中,当我想读取它以进行调试时,在它上面运行一个XML-tidy宏.