You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 01:45:01