Mam tego trochę kodu, który serializuje obiekt do pliku. Próbuję ustawić każdy atrybut XML na wyjściu w osobnym wierszu. Kod wygląda następująco:Jak ustawić właściwość Ustawienia w XmlTextWriter, aby można było pisać każdy atrybut XML w osobnej linii?
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);
}
}
Jedynym problemem jest to, własność obiektu XmlTextWriter
Settings
jest tylko do odczytu.
Jak ustawić właściwość Settings
na obiekcie XmlTextWriter
, aby ustawienie NewLineOnAttributes
zadziałało?
Cóż, myślałem, że potrzebował XmlTextWriter
, ponieważ XmlWriter
jest klasa abstract
. Trochę mylące, jeśli mnie pytasz. końcowy kod roboczych jest tutaj:
/// <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);
}
}
Nie instancji. Mówi, że został wykonany, ale utworzony obiekt jest pusty. Uwaga: Użyłem 'XmlTextWriter writer = XmlWriter.Create (filePath, settings) jako XmlTextWriter;' –
@RobertHarvey - Oznacza to, że 'XmlWriter.Create (...)' nie tworzy 'XmlTextWriter'. Kiedy spojrzysz na wynik, przekonasz się, że zwraca 'XmlWellFormedWriter'. Byłoby jednak mądrze traktować to jak "XmlWriter". – Polity
Jak więc uzyskać go do 'XmlTextWriter'? –