如何在XmlTextWriter中设置Settings属性,以便我可以将每个XML属性单独写在一行上?

20

我有以下代码,将一个对象序列化到文件中。我想让每个XML属性输出在单独的一行上。代码如下:

public static void ToXMLFile(Object obj, string filePath)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.NewLineOnAttributes = true;

    XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8);
    writer.Settings = settings; // Fails here.  Property is read only.

    using (Stream baseStream = writer.BaseStream)
    {
        serializer.Serialize(writer, obj);
    }
}
唯一的问题是,XmlTextWriter对象的Settings属性是只读的。 如何设置XmlTextWriter对象的Settings属性,以使NewLineOnAttributes设置起作用? 好吧,我原本以为需要一个XmlTextWriter,因为XmlWriter是一个抽象类,这有点让人困惑。 最终的工作代码在这里:
/// <summary>
/// Serializes an object to an XML file; writes each XML attribute to a new line.
/// </summary>
public static void ToXMLFile(Object obj, string filePath)
{
    XmlSerializer serializer = new XmlSerializer(obj.GetType());

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;
    settings.NewLineOnAttributes = true;

    using (XmlWriter writer = XmlWriter.Create(filePath, settings))
    {
        serializer.Serialize(writer, obj);
    }
}
2个回答

23

使用XmlWriter的静态Create()方法。

XmlWriter.Create(filePath, settings);

请注意,您可以在设置中设置NewLineOnAttributes属性。


它没有实例化。它说它执行了,但是所创建的对象为空。注意:我使用了XmlTextWriter writer = XmlWriter.Create(filePath, settings) as XmlTextWriter; - Robert Harvey
@RobertHarvey - 这意味着 XmlWriter.Create(...) 不会创建一个 XmlTextWriter。当你查看输出时,你会发现它返回一个 XmlWellFormedWriter。不过最好还是把它当作一个 XmlWriter 来处理。 - Polity
那么我该如何将它转换为 XmlTextWriter - Robert Harvey
1
没关系,我已经解决了,谢谢。你是对的,我只需要一个XmlWriterXmlWriter类是一个抽象类,但你仍然可以创建它的实例。而且这样创建的实例被称为其他东西,这太奇怪了。 - Robert Harvey

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接