.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:输出 实体
要输出不被转义的 ,需要自定义序列化逻辑,避免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(" ", " "); reader.ReadEndElement(); } public void WriteXml(XmlWriter writer) { writer.WriteStartElement("tag"); // 将空格替换为 后用WriteRaw输出,避免转义 var outputContent = TagContent == " " ? " " : TagContent; writer.WriteRaw(outputContent); writer.WriteEndElement(); } }
该方案序列化后输出为<tag> </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
相关产品推荐
相关产品推荐

