XmlSerializer是C#中用于对象与XML互转的常用工具,需使用System.Xml.Serialization命名空间。首先,类必须为公共且具有无参构造函数,仅序列化公共读写属性。通过示例Person类展示序列化过程:创建XmlSerializer实例,利用StringWriter将对象转为XML字符串,输出包含Name、Age、Email等元素的标准格式。反序列化时,使用StringReader读取XML并还原为对象,要求结构严格匹配,否则抛异常。通过特性可自定义序列化行为:[XmlElement]更改节点名,[XmlAttribute]将属性作为XML属性输出,[XmlIgnore]忽略敏感字段,[XmlRoot]设置根元素名称。集合处理支持List和数组,使用[XmlArray]和[XmlArrayItem]控制容器与项标签。注意Dictionary不被直接支持,避免循环引用,首次序列化因动态生成程序集较慢,建议静态缓存XmlSerializer实例以提升性能。适用于配置文件读写与数据交换场景。

在C#开发中,XmlSerializer 是处理对象与XML之间序列化和反序列化的常用工具。它属于 System.Xml.Serialization 命名空间,使用简单、功能强大,适合将 .NET 对象转换为 XML 格式保存或传输,也支持从 XML 还原为对象。
一、基本用法:对象转XML(序列化)
要将一个对象序列化为XML字符串,需确保类是公共的,并具有无参构造函数。以下是一个示例:
public class Person { public string Name { get; set; } public int Age { get; set; } public string Email { get; set; } }
使用 XmlSerializer 将 Person 实例转为 XML:
using System.IO; using System.Xml.Serialization; Person person = new Person { Name = “张三”, Age = 28, Email = “zhangsan@example.com” }; XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (StringWriter writer = new StringWriter()) { serializer.Serialize(writer, person); string xml = writer.ToString(); Console.WriteLine(xml); }
输出结果类似:
张三28zhangsan@example.com
二、XML转对象(反序列化)
将之前生成的XML字符串还原为 Person 对象:
string xml = @”张三28zhangsan@example.com”; XmlSerializer serializer = new XmlSerializer(typeof(Person)); using (StringReader reader = new StringReader(xml)) { Person restored = (Person)serializer.Deserialize(reader); Console.WriteLine($”姓名:{restored.Name},年龄:{restored.Age}”); }
注意:反序列化时传入的XML必须与目标类结构匹配,否则会抛出异常。
三、控制序列化行为:特性(Attributes)
通过添加特性可以自定义XML输出格式,比如更改节点名、忽略字段、设置命名空间等。
[XmlElement(“CustomName”)]:指定元素名称[XmlAttribute]:将属性序列化为XML属性而非子元素[XmlIgnore]:跳过该字段/属性[DefaultValue]:默认值不输出到XML[XmlRoot(“CustomRoot”)]:设置根元素名称
示例:
[XmlRoot(“Customer”)] public class Person { [XmlElement(“FullName”)] public string Name { get; set; } [XmlAttribute] public int Age { get; set; } [XmlIgnore] public string Password { get; set; } }
生成的XML如下:
张三
四、处理集合与数组
XmlSerializer 支持 List、T[] 等集合类型。默认情况下,集合会被包装在一个容器元素中。
public class PeopleList { [XmlArray(“Items”)] [XmlArrayItem(“Person”)] public List Persons { get; set; } }
这样生成的XML更清晰:
张三李四
使用 XmlArray 和 XmlArrayItem 可以分别控制集合标签和项标签名称。
五、注意事项与常见问题
类必须有公共无参构造函数,否则序列化失败只支持公共读写属性(Property),不序列化字段(Field)除非特殊处理泛型集合如 List 支持良好,但 Dictionary 不被直接支持避免循环引用,XmlSerializer 不支持对象图中存在循环引用性能方面:首次序列化较慢(因动态生成程序集),可考虑缓存 XmlSerializer 实例
建议创建 XmlSerializer 实例时复用,避免频繁创建影响性能:
private static readonly XmlSerializer _serializer = new XmlSerializer(typeof(Person));基本上就这些。掌握 XmlSerializer 的基本用法和特性控制,就能高效实现对象与XML之间的互转,适用于配置文件、数据交换等场景。
以上就是C# XmlSerializer用法详解:对象与xml互转的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441050.html
微信扫一扫
支付宝扫一扫