当前位置:首页 > C# > 正文

C# XML序列化详解(如何在元素与属性之间灵活切换)

在 C# 开发中,XML 序列化是一种将对象转换为 XML 格式(或从 XML 还原为对象)的常用技术。通过 .NET 提供的 XmlSerializer 类,我们可以轻松地实现这一功能。但很多初学者会困惑:如何控制某个字段是以XML 元素还是XML 属性的形式输出?本文将手把手教你掌握 C# XML 序列化中元素与属性的切换技巧,即使是编程小白也能快速上手!

C# XML序列化详解(如何在元素与属性之间灵活切换) XML序列化 XML属性与元素 XmlSerializer教程 C#数据序列化 第1张

一、基础知识:XML 元素 vs XML 属性

在 XML 中,有两种常见的数据表示方式:

  • 元素(Element):如 <Name>张三</Name>
  • 属性(Attribute):如 <Person Name="张三" />

C# 数据序列化过程中,我们可以通过特性(Attribute)来指定字段是作为元素还是属性输出。

二、使用 XmlElement 和 XmlAttribute 控制输出形式

.NET 提供了两个关键特性:

  • [XmlElement]:强制字段以元素形式输出(默认行为)
  • [XmlAttribute]:强制字段以属性形式输出

示例:定义一个 Person 类

using System;using System.Xml.Serialization;public class Person{    [XmlAttribute("id")]    public int Id { get; set; }    [XmlElement("FullName")]    public string Name { get; set; }    [XmlAttribute("age")]    public int Age { get; set; }    // 默认行为:不加特性也会作为元素输出    public string Email { get; set; }}

序列化代码

using System.IO;using System.Xml.Serialization;class Program{    static void Main()    {        var person = new Person        {            Id = 101,            Name = "李四",            Age = 30,            Email = "lisi@example.com"        };        var serializer = new XmlSerializer(typeof(Person));        using (var writer = new StringWriter())        {            serializer.Serialize(writer, person);            Console.WriteLine(writer.ToString());        }    }}

输出结果

<?xml version="1.0" encoding="utf-16"?><Person id="101" age="30">  <FullName>李四</FullName>  <Email>lisi@example.com</Email></Person>

可以看到:IdAge 被输出为 XML 属性,而 Name(通过 XmlElement 重命名)和 Email(默认)作为子元素。

三、常见问题与注意事项

  • 一个字段不能同时使用 [XmlElement][XmlAttribute],否则会报错。
  • 属性(Attribute)只能用于简单类型(如 string、int、bool 等),不能用于复杂对象或集合。
  • 如果希望完全忽略某个字段,可使用 [XmlIgnore] 特性。

四、总结

通过合理使用 [XmlElement][XmlAttribute],你可以完全掌控 C# XML 序列化的输出结构。这不仅让 XML 更符合你的业务需求,也提升了数据交换的可读性和规范性。无论你是开发 Web API、配置文件,还是处理外部系统数据,掌握 XML 属性与元素的切换都是必备技能。

希望这篇 XmlSerializer 教程能帮助你轻松驾驭 C# 中的 XML 序列化!