C#如何序列化对象为XML XmlSerializer用法


XmlSerializer 是 C# 中轻量级 XML 序列化工具,支持 POCO 类的序列化与反序列化,需配合 XmlRoot、XmlElement 等特性控制结构,原生支持数组和 List,但不支持 Dictionary;注意编码、XML 声明、性能缓存及类型限制。

XmlSerializer 是 C# 中最常用、最轻量的 XML 序列化工具,适合将简单对象(尤其是 POCO 类)快速转为 XML 字符串或文件,也支持反序列化。它不依赖属性标记也能工作,但要控制输出结构,必须配合 [XmlRoot][XmlElement][XmlAttribute] 等特性使用。

基础用法:默认序列化

只要类有公共读写属性或字段,且有无参构造函数,就能直接序列化:

  • 创建 XmlSerializer 实例时传入类型(如 new XmlSerializer(typeof(Person))
  • 调用 Serialize() 方法,传入 TextWriterStream(如 StringWriterFileStream
  • 反序列化用 Deserialize(),传入 TextReaderStream

注意:私有成员、只读属性、泛型集合(如 List)默认可序列化,但字典(Dictionary)不支持,需换用 SerializableDictionary 或自定义处理。

控制 XML 结构:常用特性

用特性精确指定节点名、顺序、是否为属性、是否忽略等:

  • [XmlRoot("Customer")] —— 指定根元素名称
  • [XmlElement("Name")] —— 将属性映射为子元素(可设 Order = 1 控制顺序)
  • [XmlAttribute("id")] —— 将属性作为 XML 属性输出
  • [XmlIgnore] —— 跳过该字段/属性
  • [XmlElement(IsNullable = true)] —— 允许输出

例如:public string FirstName { get; set; } 加上 [XmlElement("first-name")],就会生成 Tom

处理集合与嵌套对象

XmlSerializer 原生支持数组和 List,但需注意:

  • 集合属性名默认作为父节点,内部每个项用 包裹(可通过 [XmlArray("Orders")][XmlArrayItem("Order")] 自定义)
  • 嵌套对象自动递归序列化,无需额外配置(前提是嵌套类也满足可序列化条件)
  • 若集合项类型不唯一(如基类含多个子类),需用 [XmlInclude(typeof(SubClass))] 提前声明

实用技巧与避坑提醒

实际开发中容易遇到的问题和应对方式:

  • 中文乱码?用 XmlWriter.Create(stream, new XmlWriterSettings { Encoding = Encoding.UTF8 }) 显式指定编码
  • 想省略 XML 声明()?设置 XmlWriterSettings.OmitXmlDeclaration = true
  • 性能敏感场景?XmlSerializer 会为每个类型动态生成临时程序集,首次序列化较慢;可提前调用 new XmlSerializer(type) 缓存实例复用
  • 无法序列化接口、委托、指针、非公共构造函数——这些是硬性限制,需改用 DataContractSerializer 或 JSON 替代

不复杂但容易忽略。


# js  # json  # 编码  # 工具  # 中文乱码  # stream  # c#  # String  # 子类  # 构造函数  # xml  # 字符串  # 递归  # 指针  # 接口  # public  # FileStream  # 委托  # 泛型  # nil  # 对象  # typeof  # 序列化  # 自定义  # 就会  # 尤其是  # 就能  # 首次  # 多个  # 也能 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 网络优化76771 】 【 技术知识130152 】 【 IDC云计算60162 】 【 营销推广131313 】 【 AI优化88182 】 【 百度推广37138 】 【 网站推荐60173 】 【 精选阅读31334


相关推荐: c# 服务器GC和工作站GC的区别和设置  Win11怎么卸载Photos应用_Win11卸载Photos应用方法【教程】  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  LINUX如何开放防火墙端口_Linux firewalld与iptables开放端口命令【安全配置】  Go语言中slice追加操作的底层共享机制解析  php怎么连接数据库_MySQL数据库连接的基础代码编写【说明】  Win11怎么查看激活状态_查询Windows 11是否已永久激活【详解】  PHP怎么接收前端传的时间戳_处理时间戳参数转换技巧汇总【指南】  php8.4匿名类怎么用_php8.4匿名类创建与使用场景【介绍】  Win11怎么关闭贴靠布局_Win11禁用窗口最大化时的布局菜单  Python音视频处理高级项目教程_FFmpegPydub剪辑与特效  如何在Golang中处理云原生事件_使用Event和Notification机制  电脑的“网络和共享中心”去哪了_Windows 11新版网络设置指南【新手】  c++20的std::format怎么用 比printf更安全高效的格式化方法【详解】  如何用正则表达式精确匹配最多含一个换行符的起止片段  Go 语言标准库为何不提供泛型 Contains 方法:设计哲学与类型系统约束  如何在Golang中使用内置函数_Golanglen append make等使用技巧  php中$this和::能混用吗_对象与静态作用域冲突解决【方法】  Python网络异常模拟_测试说明【指导】  Windows如何使用BitLocker To Go加密U盘?(移动驱动器加密)  Win11怎么更改任务栏颜色_Windows11个性化重音色设置  php8.4xdebug无法调试怎么办_php8.4xdebug配置问题解决【解答】  Win11文件扩展名怎么显示_Win11查看文件后缀名设置【基础】  Win11怎么设置默认PDF阅读器 Win11修改PDF打开方式【步骤】  Win10系统怎么查看显卡温度_Win10任务管理器GPU温度  Win11怎么关闭自动维护 Win11禁用系统自动维护功能【优化】  如何在 Windows 11 中使用 AlomWare 工具箱  如何使用正则表达式批量替换重复的 *- 模式为固定字符串  Win11如何连接Xbox手柄 Win11蓝牙连接游戏手柄教程【步骤】  PythonDocker高级项目部署教程_多容器管理与CI/CD流水线  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Win10系统更新错误0x80240034怎么办 Win10更新错误解决法【方法】  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Win11怎么关闭定位服务 Win11禁止应用获取位置信息【隐私】  Python对象比较排序规则_集合使用说明【指导】  Python列表推导式与字典推导式教程_简化代码高效写法  Win11讲述人怎么关闭_Win11误触开启语音朗读关闭【快捷键】  c++中explicit(bool)的用法 c++条件性explicit【C++20】  Python实现图数据库操作_Neo4j核心CRUD与图算法解析  Win10怎样安装Excel数据分析工具_Win10安装分析工具包步骤【教程】  Win11怎么快速锁屏_Win11一键锁屏快捷键Win+L【基础】  Win11怎么更改盘符_Win11磁盘管理修改驱动器号【步骤】  Win11 C盘满了怎么清理 Win11磁盘清理和存储感知使用教程【新手必看】  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  Python与Docker容器化部署实战_镜像构建与CI/CD流程  Windows蓝屏错误0x00000023怎么修复_FAT文件系统错误处理  Windows10电脑怎么设置防火墙出站规则_Win10禁止程序联网教程  Mac如何设置动态壁纸?(让桌面动起来)  Win11怎么清理C盘OneDrive缓存_Win11清理OneDrive缓存技巧【方法】  如何在 IIS 上为 ASP.NET 6 应用排除特定目录并交由 PHP 处理 

 2026-01-02

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

致胜网络推广营销网


致胜网络推广营销网

致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。

 915688610

 17370845950

 915688610@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.