C# XML序列化:如何让元素带属性且不生成子元素
实现带属性且包含文本的XML元素序列化
要生成目标XML结构,核心是利用[XmlText]特性将类属性映射为元素的文本内容,而非子元素。以下是具体实现方案:
正确的C#类定义
[XmlRoot("group", IsNullable = false)] public class Test1 { [XmlElement("name")] public Test2 Name { get; set; } } public class Test2 { [XmlAttribute] public string attr = "yes"; [XmlText] public string TextContent { get; set; } }
序列化示例代码
// 初始化对象 var testInstance = new Test1 { Name = new Test2 { TextContent = "My name" } }; // 执行序列化 var serializer = new XmlSerializer(typeof(Test1)); using var stringWriter = new StringWriter(); serializer.Serialize(stringWriter, testInstance); // 输出结果 Console.WriteLine(stringWriter.ToString());
最终序列化结果
<?xml version="1.0" encoding="utf-16"?> <group> <name attr="yes">My name</name> </group>
关键说明
[XmlText]特性指定属性值作为所在元素的直接文本内容,而非生成嵌套子元素,这解决了之前额外<name>子元素的问题。- 将
<name>元素的属性和文本内容封装到Test2类中,通过[XmlElement("name")]标记Test1中的Name属性,确保Test2实例被序列化为带有attr属性的<name>元素。
内容的提问来源于stack exchange,提问作者uncletall
相关产品推荐
相关产品推荐

