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

如何使用XmlSerializer序列化包含CDATA段的XML文件?

用XmlSerializer生成包含CDATA段的XML文件

要生成包含CDATA段的XML,你需要给要放入CDATA的内容自定义序列化逻辑,具体步骤如下:

1. 定义实体类与CDATA包装类

先创建对应XML结构的实体类,同时定义一个实现IXmlSerializable的包装类,用来处理CDATA的写入:

// 对应根节点<root>
public class Root
{
    // 对应CDATA段的内容,用自定义包装类
    [XmlText]
    public CDataWrapper InfoCData { get; set; }

    // 对应标准标签<info2>
    public Info2 Info2 { get; set; }
}

// 对应<info2>的结构
public class Info2
{
    public string Prop1 { get; set; }
}

// 自定义CDATA包装类,负责生成CDATA段
public class CDataWrapper : IXmlSerializable
{
    // 存储要放入CDATA的XML内容
    public string Content { get; set; }

    public System.Xml.Schema.XmlSchema GetSchema() => null;

    public void ReadXml(System.Xml.XmlReader reader)
    {
        // 反序列化时读取CDATA内容(按需实现)
        Content = reader.ReadElementContentAsString();
    }

    public void WriteXml(System.Xml.XmlWriter writer)
    {
        // 写入CDATA段
        writer.WriteCData(Content);
    }
}

2. 构造数据并序列化

先将需要放入CDATA的<info>部分序列化为字符串,再将整个Root对象序列化到文件:

// 1. 构造<info>的内容并序列化为字符串
var infoData = new { Number = 12, Files = 1 };
var infoSerializer = new XmlSerializer(infoData.GetType());
string infoXml;

// 去掉默认命名空间,让CDATA内的格式更干净
var ns = new XmlSerializerNamespaces();
ns.Add("", "");

using (var sw = new StringWriter())
{
    infoSerializer.Serialize(sw, infoData, ns);
    infoXml = sw.ToString();
    // 移除自动生成的XML声明
    infoXml = infoXml.Replace(@"<?xml version=""1.0"" encoding=""utf-16""?>", "");
}

// 2. 构造Root对象
var root = new Root
{
    InfoCData = new CDataWrapper { Content = infoXml },
    Info2 = new Info2 { Prop1 = "prop1" }
};

// 3. 序列化Root到目标文件
var rootSerializer = new XmlSerializer(typeof(Root));
using (var writer = new StreamWriter("output.xml"))
{
    rootSerializer.Serialize(writer, root);
}

效果说明

运行上述代码后,生成的XML会和你需要的格式一致:<root>下包含CDATA包裹的<info>内容,以及标准格式的<info2>标签。

内容的提问来源于stack exchange,提问作者Rafael Ribeiro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 22:45:07