C#中标准XML序列化使用XmlSerializer类,要求类有public无参构造函数,仅序列化public成员,支持泛型集合但不支持Dictionary;可通过特性定制结构,反序列化需XML与类型匹配。
在C#中,最常用且标准的方式是使用 XmlSerializer 类将对象序列化为XML字符串或文件。它要求类具有公共属性、无参构造函数,并支持基本类型和可序列化的引用类型。
只需创建 XmlSerializer 实例,调用 Serialize 方法,配合 StringWriter 或 MemoryStream 即可获得XML文本:
List),但不支持 Dictionary(需包装或改用其他方式)var person = new Person { Name = "张三", Age = 28 };
var serializer = new XmlSerializer(typeof(Person));
using var writer = new StringWriter();
serializer.Serialize(writer, person);
string xml = writer.ToString(); // 张三 28
通过添加 [XmlRoot]、[XmlElement]、[XmlAttribute] 等特性,可精确控制元素名、是否作为属性、是否忽略等:
[XmlRoot("User
")] → 根节点名为
[XmlElement("Fullname")] → 属性 Name 输出为
[XmlAttribute("id")] → 将字段作为 XML 属性:
[XmlIgnore] → 跳过该属性不序列化使用同一个 XmlSerializer 实例调用 Deserialize,传入 TextReader 或 Stream:
[XmlAnyElement] 捕获冗余内容string xml = ""; var serializer = new XmlSerializer(typeof(Person)); using var reader = new StringReader(xml); var p = (Person)serializer.Deserialize(reader); // p.Name == "李四" 李四 30
XmlSerializer 是轻量、声明式、适合配置类或数据传输的首选。但它不支持循环引用,也不处理 DateTimeOffset 或匿名类型。遇到以下情况可考虑其他方式:
DataContractSerializer(需加 [DataContract])XmlWriter
System.Text.Json 或 Newtonsoft.Json,再转XML(不推荐,性能差)[Serializable] 并非必须(XmlSerializer 不依赖它),但加上无害,便于未来扩展。