2011-11-23 12 views
14

Bir nesneyi bir dosyaya serileştiren bir kod parçam var. Her XML özniteliğinin ayrı bir satırda çıktısını almaya çalışıyorum. Kod şöyle görünür:XmlTextWriter'de Ayarlar özelliğini nasıl ayarlayabilirim, böylece her XML özniteliğini kendi satırına yazabilirim?

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

tek sorun, XmlTextWriter nesnenin Settings özelliği salt okunur.

NewLineOnAttributes ayarının çalışması için XmlTextWriter nesnesindeki Settings özelliğini nasıl ayarlayabilirim?


Eh, XmlWriter bir abstract sınıftır beri, bir XmlTextWriter gerektiğini düşündük. Bana sorarsan biraz kafa karıştırıcı. Nihai çalışma kodu burada:

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

cevap

18

XmlWriter statik Create() yöntemi kullanın. ayarlardan NewLineOnAttributes özelliği ayarlayabilirsiniz

XmlWriter.Create(filePath, settings); 

Not.

+0

O örneğini vermedi görme: Formatting özelliğini kullanmalısınız. Uygulandığını söylüyor, ancak yaratılan nesne boş. Not: Ben 'XmlTextWriter yazar = XmlWriter.Create XmlTextWriter olarak (filePath, ayarlar) kullanılan;' –

+0

@RobertHarvey - Bu 'XmlWriter.Create (...)' a XmlTextWriter' yaratmak anlamına gelir. Çıktıya baktığınızda, bir 'XmlWellFormedWriter' döndürdüğünü göreceksiniz. Bir XmlWriter gibi davranmak akıllıca olurdu. – Polity

+0

Peki, bir "XmlTextWriter" e nasıl ulaşabilirim? –

İlgili konular