0

0

XML反序列化是什么 如何将XML字符串还原为对象

畫卷琴夢

畫卷琴夢

发布时间:2026-02-24 13:07:32

|

335人浏览过

|

来源于php中文网

原创

xml反序列化是将xml字符串按预定义结构映射到对象的过程,依赖严格命名匹配与类型对齐;c#需public无参构造函数和属性,python常用xmltodict+pydantic转换,java主流用jackson xml并注意属性标记与命名策略。

xml反序列化是什么 如何将xml字符串还原为对象

XML反序列化本质是结构映射,不是“解析完就完事”

XML反序列化指将符合特定结构的XML字符串按预定义规则,自动填充到内存中的对象(如 C# 的 class、Java 的 POJO、Python 的 dataclass)。它依赖**严格的命名匹配 + 类型对齐**,不是通用 XML 解析(如用 xml.etree.ElementTree 手动遍历),也不处理任意嵌套或动态字段。

C# 中用 XmlSerializer 反序列化的关键约束

必须满足以下条件,否则会抛出 InvalidOperationException 或静默失败:

  • 必须有 public 无参构造函数
  • 要映射的字段/属性必须是 public,且不能是 readonlyinit-only(除非用 [XmlElement] 显式标注)
  • XML 中的标签名默认严格对应属性名(区分大小写),例如 <name>Alice</name>public string Name { get; set; }
  • 集合类型需用 [XmlArray][XmlArrayItem] 明确声明,否则反序列化为空或报错
var serializer = new XmlSerializer(typeof(Person));
using var reader = new StringReader("<Person><Name>Bob</Name><Age>30</Age></Person>");
var person = (Person)serializer.Deserialize(reader); // 成功

Python 用 xmltodict + pydantic 模拟反序列化更灵活

标准库 xml.etree.ElementTree 不提供对象绑定能力;常用组合是先转成 dict,再用数据验证库映射为对象。这绕过了命名强绑定,但需额外转换步骤:

Scribble Diffusion
Scribble Diffusion

使用AI将你的草图变成精致的图像

下载
  • xmltodict.parse() 把 XML 转成嵌套 dict,注意它把所有值当 str 处理,数字/布尔需手动转换
  • pydantic.BaseModelmodel_validate() 支持从 dict 构建实例,并自动做类型转换和校验
  • 无法直接处理 XML 属性(如 <item id="123"></item>),需提前提取并合并进元素内容 dict
import xmltodict
from pydantic import BaseModel
<p>class Item(BaseModel):
id: int
name: str</p><p>xml_str = '<item id="123"><name>Widget</name></item>'
d = xmltodict.parse(xml_str)</p><h1>手动把 @id 提升为字段</h1><p>item_data = {'id': int(d['item']['@id']), 'name': d['item']['name']}
item = Item.model_validate(item_data)

Java 的 JAXB 已弃用,Jackson XML 是当前主流选择

从 Java 11 开始,javax.xml.bind(JAXB)被移除,com.fasterxml.jackson.dataformat:jackson-dataformat-xml 成为事实标准。它的行为差异点很实际:

  • 默认不识别 XML 属性,需用 @JacksonXmlProperty(isAttribute = true) 显式标记
  • 集合反序列化时,@JacksonXmlRootElement(localName = "items") 控制根名,@JacksonXmlElementWrapper(useWrapping = false) 决定是否跳过包装节点
  • 空标签如 <email></email> 默认映射为 null,而非空字符串,需用 @JsonSetter(nulls = Nulls.SKIP) 控制

最易被忽略的是命名策略:Jackson 默认用驼峰转连字符(firstName<first-name></first-name>),若 XML 是 PascalCase,必须配 XmlMapper.setDefaultPropertyNamingStrategy(PropertyNamingStrategies.UPPER_CAMEL_CASE)

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

850

2023.08.02

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

246

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

866

2024.03.01

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1932

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

2109

2024.08.01

xml是什么格式的文件
xml是什么格式的文件

xml是一种纯文本格式的文件。xml指的是可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。想了解更多相关的内容,可阅读本专题下面的相关文章。

1134

2024.11.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

638

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

217

2023.09.04

苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法
苹果官网入口与在线访问指南_中国站点快速直达与iPhone查看方法

本专题汇总苹果官网最新可用入口及中国站点访问方式,涵盖官网直达链接、iPhone官方页面查看方法与常见访问说明,帮助用户快速进入苹果官方网站,便捷了解产品信息与官方服务。

2

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号