默認的序列化對象為 XML 字符串時,是沒有進行格式化的,也就是所有的內容都在相同的一行。本文告訴大家方法,在序列化對象時,轉換的 XML 是格式化的。或者說拿到 XML 字符串,對這個 XML 字符串進行格式化
在序列化某個對象的時候,序列化出來的 XML 進行格式化,可以在創建的 XmlWriter 傳入 XmlWriterSettings 設置 Indent 屬性,如下面代碼
public static string Serialize<T>(T obj)
{
var ns = new XmlSerializerNamespaces();
ns.Add("", "");
var xmlSerializer = new XmlSerializer(typeof(T));
var stringBuilder = new StringBuilder();
using (var xmlWriter = XmlWriter.Create(new StringWriter(stringBuilder), new XmlWriterSettings
{
Indent = true
}))
{
xmlSerializer.Serialize(xmlWriter, obj, ns);
}
return stringBuilder.ToString();
}
上面代碼的 XmlSerializerNamespaces 是為了去掉 XML 的命名空間
此時序列化出來的內容將會是格式化的
對於現有的 XML 文件或 XML 字符串,進行格式化,方法是先讀取出來,然后再次寫入,寫入時設置格式化
var xmlString = File.ReadAllText(xmlFile);
XmlDocument document = new XmlDocument();
document.LoadXml(xmlString);
using var fileStream = new FileStream(xmlFile, FileMode.Create, FileAccess.Write);
fileStream.SetLength(0);
using var xmlWriter = XmlWriter.Create(fileStream, new XmlWriterSettings()
{
Indent = true
});
document.WriteTo(xmlWriter);
上面代碼的 xmlFile 是一個存放在本地的文件