2011-11-23 14 views
14

Tengo este código, que serializa un objeto en un archivo. Estoy intentando que cada atributo XML salga en una línea separada. El código es el siguiente:¿Cómo configuro la propiedad Settings en XmlTextWriter, para que pueda escribir cada atributo XML en su propia línea?

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

El único problema es que la propiedad del objeto SettingsXmlTextWriter es de sólo lectura.

¿Cómo configuro la propiedad Settings en el objeto XmlTextWriter, de modo que la configuración NewLineOnAttributes funcione?


Bueno, pensé que necesitaba un XmlTextWriter, ya que es una clase XmlWriterabstract. Un poco confuso si me preguntas. código de trabajo final está aquí:

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

Respuesta

18

Utilice el método estático de Create()XmlWriter.

XmlWriter.Create(filePath, settings); 

Tenga en cuenta que puede establecer la propiedad NewLineOnAttributes en la configuración.

+0

No instanciar. Dice que se ejecutó, pero el objeto así creado es nulo. Nota: utilicé 'XmlTextWriter writer = XmlWriter.Create (filePath, settings) como XmlTextWriter;' –

+0

@RobertHarvey - Eso significa que 'XmlWriter.Create (...)' no crea un 'XmlTextWriter'. Cuando mires el resultado, verás que devuelve un 'XmlWellFormedWriter'. Sin embargo, sería sabio tratarlo como un 'XmlWriter'. – Polity

+0

Entonces, ¿cómo puedo obtener un 'XmlTextWriter'? –

Cuestiones relacionadas