Ответ 1
Используйте статический Create()
метод XmlWriter
.
XmlWriter.Create(filePath, settings);
Обратите внимание, что вы можете установить свойство NewLineOnAttributes
в настройках.
У меня есть этот бит кода, который сериализует объект в файл. Я пытаюсь получить каждый атрибут 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);
}
}
Единственная проблема заключается в том, что свойство Settings
объекта XmlTextWriter
доступно только для чтения.
Как установить свойство Settings
на объект XmlTextWriter
, чтобы параметр NewLineOnAttributes
работал?
Ну, я думал, что мне нужен XmlTextWriter
, так как XmlWriter
является классом abstract
. Подумайте, если вы спросите меня. Окончательный рабочий код здесь:
/// <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);
}
}
Используйте статический Create()
метод XmlWriter
.
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