XmlSerializer 是 C# 中轻量级 XML 序列化工具,支持 POCO 类的序列化与反序列化,需配合 XmlRoot、XmlElement 等特性控制结构,原生支持数组和 List,但不支持 Dictionary;注意编码、XML 声明、性能缓存及类型限制。
XmlSerializer 是 C# 中最常用、最轻量的 XML 序列化工具,适合将简单对象(尤其是 POCO 类)快速转为 XML 字符串或文件,也支持反序列化。它不依赖属性标记也能工作,但要控制输出结构,必须配合 [XmlRoot]、[XmlElement]、[XmlAttribute] 等特性使用。
只要类有公共读写属性或字段,且有无参构造函数,就能直接序列化:
XmlSerializer 实例时传入类型(如 new XmlSerializer(typeof(Person)))Serialize() 方法,传入 TextWriter 或 Stream(如 StringWriter 或 FileStream)Deserialize(),传入 TextReader 或 Stream
注意:私有成员、只读属性、泛型集合(如 List)默认可序列化,但字典(Dictionary)不支持,需换用 Serializ 或自定义处理。
ableDictionary
用特性精确指定节点名、顺序、是否为属性、是否忽略等:
[XmlRoot("Customer")] —— 指定根元素名称[XmlElement("Name")] —— 将属性映射为子元素(可设 Order = 1 控制顺序)[XmlAttribute("id")] —— 将属性作为 XML 属性输出[XmlIgnore] —— 跳过该字段/属性[XmlElement(IsNullable = true)] —— 允许输出
例如:public string FirstName { get; set; } 加上 [XmlElement("first-name")],就会生成 。
XmlSerializer 原生支持数组和 List,但需注意:
包裹(可通过 [XmlArray("Orders")] 和 [XmlArrayItem("Order")] 自定义)[XmlInclude(typeof(SubClass))] 提前声明实际开发中容易遇到的问题和应对方式:
XmlWriter.Create(stream, new XmlWriterSettings { Encoding = Encoding.UTF8 }) 显式指定编码
)?设置 XmlWriterSettings.OmitXmlDeclaration = true
XmlSerializer 会为每个类型动态生成临时程序集,首次序列化较慢;可提前调用 new XmlSerializer(type) 缓存实例复用DataContractSerializer 或 JSON 替代不复杂但容易忽略。