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);
}
}
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;' –
@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
Vì vậy, làm thế nào để tôi nhận được nó vào một 'XmlTextWriter'? –