.NET 6 下XmlSerializer实现XML美化输出(Pretty Print)的方法
.NET 6下XmlSerializer输出带缩进美化XML的方法
从.NET 6开始,XmlSerializer直接向StreamWriter序列化时的默认行为调整为输出压缩格式的XML,不再默认启用缩进换行,要得到格式化输出需要显式通过XmlWriter指定格式化配置。
具体实现步骤
- 定义
XmlWriterSettings配置,开启缩进并设置缩进格式 - 使用配置好的参数创建
XmlWriter实例,替换原有的StreamWriter作为序列化输出目标 - 将对象序列化到
XmlWriter中即可得到带缩进的XML内容
完整修改后代码
using System.Text; using System.Xml; using System.Xml.Serialization; var serializer = new XmlSerializer(typeof(Order)); var order = new Order { Address = new Address { FirstName = "Name" } }; await using var memoryStream = new MemoryStream(); // 配置XML格式化参数 var xmlSettings = new XmlWriterSettings { Encoding = Encoding.UTF8, // 开启缩进 Indent = true, // 设置缩进字符为2个空格,可按需调整为制表符等 IndentChars = " ", // 换行符使用系统默认值,也可按需指定 NewLineChars = Environment.NewLine }; // 使用配置创建XmlWriter using var xmlWriter = XmlWriter.Create(memoryStream, xmlSettings); serializer.Serialize(xmlWriter, order); // 强制刷新XmlWriter缓冲区确保所有内容写入流 xmlWriter.Flush(); var result = Encoding.UTF8.GetString(memoryStream.ToArray()); Console.WriteLine(result); public class Order { public Address Address; } public class Address { public string FirstName; }
可选优化(按需使用)
如果不需要输出xsi、xsd的默认命名空间,可以在序列化时传入自定义的命名空间配置:
var ns = new XmlSerializerNamespaces(); // 添加空命名空间,去掉默认的xsi、xsd声明 ns.Add("", ""); serializer.Serialize(xmlWriter, order, ns);
内容的提问来源于stack exchange,提问作者dhrm
相关产品推荐
相关产品推荐

