如何在XmlTextWriter中设置Settings属性,以便我可以在自己的行上编写每个XML属性?

我有一些代码,它将一个对象序列化为一个文件。 我试图让每个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是一个abstract类。 如果你问我,有点困惑。 最终的工作代码在这里:

 ///  /// Serializes an object to an XML file; writes each XML attribute to a new line. ///  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); } } 

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

 XmlWriter.Create(filePath, settings); 

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

我知道问题是旧的,无论如何,实际上可以为XMLTextWriter设置缩进。 与XMLwriter不同,您不必通过设置; 你应该使用Formatting属性:

 XmlTextWriter writer = new XmlTextWriter(filePath, Encoding.UTF8); w.Formatting = Formatting.Indented; 

请参阅https://msdn.microsoft.com/en-us/library/system.xml.xmltextwriter.formatting(v=vs.110).aspx