2011-11-23 27 views
14

Tôi có bit mã này, sẽ tuần tự hóa một đối tượng vào một tệp. Tôi đang cố gắng để có được mỗi thuộc tính XML để xuất trên một dòng riêng biệt. Mã này trông như thế này:Làm cách nào để đặt thuộc tính Cài đặt trong XmlTextWriter, để tôi có thể viết từng thuộc tính XML trên dòng riêng của nó?

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

Vấn đề duy nhất là, Settings tài sản của đối tượng XmlTextWriter là read-only.

Làm cách nào để đặt thuộc tính Settings trên đối tượng XmlTextWriter, để cài đặt NewLineOnAttributes hoạt động?


Vâng, tôi nghĩ rằng tôi cần một XmlTextWriter, vì XmlWriter là một lớp abstract. Kinda khó hiểu nếu bạn hỏi tôi. mã làm việc cuối cùng là ở đây:

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

Trả lời

18

Sử dụng Create() phương pháp tĩnh của XmlWriter.

XmlWriter.Create(filePath, settings); 

Lưu ý rằng bạn có thể đặt thuộc tính NewLineOnAttributes trong cài đặt.

+0

Nó không nhanh chóng. Nó nói nó được thực hiện, nhưng đối tượng được tạo ra là null. Lưu ý: Tôi đã sử dụng 'XmlTextWriter writer = XmlWriter.Create (filePath, settings) như XmlTextWriter;' –

+0

@RobertHarvey - Điều đó có nghĩa là 'XmlWriter.Create (...)' không tạo ra 'XmlTextWriter'. Khi bạn nhìn vào đầu ra, bạn sẽ thấy rằng nó trả về một 'XmlWellFormedWriter'. Nó sẽ là khôn ngoan mặc dù để đối xử với nó như một 'XmlWriter'. – Polity

+0

Vì vậy, làm thế nào để tôi nhận được nó vào một 'XmlTextWriter'? –

Các vấn đề liên quan