2011-11-23 19 views
14

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 XmlTextWriterSettings 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); 
    } 
} 

Odpowiedz

18

Użyj statycznego Create() metodę XmlWriter.

XmlWriter.Create(filePath, settings); 

Należy pamiętać, że w ustawieniach można ustawić właściwość NewLineOnAttributes.

+0

Nie instancji. Mówi, że został wykonany, ale utworzony obiekt jest pusty. Uwaga: Użyłem 'XmlTextWriter writer = XmlWriter.Create (filePath, settings) jako XmlTextWriter;' –

+0

@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

+0

Jak więc uzyskać go do 'XmlTextWriter'? –