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

.NET XmlSerializer序列化时如何确保对象属性值的空格为有效空白?

解决方案

以下是两种符合需求的实现方式:

方案1:生成带xml:space="preserve"的标签

直接在对应类中添加控制XML空间保留的特性属性即可,无需自定义序列化逻辑:

public class YourDataClass
{
    // 对应xml:space属性,赋值为preserve时序列化会自动输出该特性
    [XmlAttribute("space", Namespace = "http://www.w3.org/XML/1998/namespace")]
    public string XmlSpaceSetting { get; set; } = "preserve";

    [XmlElement("tag")]
    public string TagContent { get; set; }
}

序列化时会直接输出 <tag xml:space="preserve"> </tag>,解析器会自动将标签内的空格识别为有效内容。如果不需要保留空格时,将XmlSpaceSetting赋值为null,序列化时就不会输出该特性。

方案2:输出&nbsp;实体

要输出不被转义的&nbsp;,需要自定义序列化逻辑,避免XmlSerializer自动转义&符号:

public class YourDataClass : IXmlSerializable
{
    public string TagContent { get; set; }

    // 实现IXmlSerializable接口
    public XmlSchema GetSchema() => null;

    public void ReadXml(XmlReader reader)
    {
        reader.ReadStartElement();
        TagContent = reader.ReadElementContentAsString("tag", string.Empty).Replace("&nbsp;", " ");
        reader.ReadEndElement();
    }

    public void WriteXml(XmlWriter writer)
    {
        writer.WriteStartElement("tag");
        // 将空格替换为&nbsp;后用WriteRaw输出,避免转义
        var outputContent = TagContent == " " ? "&nbsp;" : TagContent;
        writer.WriteRaw(outputContent);
        writer.WriteEndElement();
    }
}

该方案序列化后输出为<tag>&nbsp;</tag>,注意使用WriteRaw时需确保内容无非法XML字符,避免生成无效XML文档。

补充配置建议

序列化时可调整XmlWriter配置避免额外的空白干扰:

var serializeSettings = new XmlWriterSettings
{
    Indent = true,
    NewLineHandling = NewLineHandling.None,
    OmitXmlDeclaration = false
};
using var xmlWriter = XmlWriter.Create("输出路径", serializeSettings);
var serializer = new XmlSerializer(typeof(YourDataClass));
serializer.Serialize(xmlWriter, 你的实例对象);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 10:12:03