将Java对象序列化成XML格式,将XML反序列化还原为Java对象
摘要:将Java对象序列化成XML格式,将XML反序列化还原为Java对象。
一:创建Maven工程,引入xstream依赖:
<!--xstream--><dependency><groupId>com.thoughtworks.xstream</groupId><artifactId>xstream</artifactId><version>1.4.4</version></dependency>
二:创建Java序列化为XML格式、XML反序列化为Java对象的类:
package cn.micai.base.io;import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;import java.io.IOException;/*** @Auther: zhaoxinguo* @Date: 2018/8/23 10:48* @Description: 将Java对象序列化成XML格式,将XML反序列化还原为Java对象*/
public class XmlSerializeDeserializeMain {/*** 将Java对象序列化成XML格式* @param employee* @return* @throws IOException*/public static String serialize(Employee employee){// 将employee对象序列化为XMLXStream xStream = new XStream(new DomDriver());// 设置employee类的别名xStream.alias("employee", Employee.class);String personXml = xStream.toXML(employee);return personXml;}/*** 将XML反序列化还原为Java对象* @param personXml* @return*/public static Employee deserialize(String personXml) {// 将employee对象序列化为XMLXStream xStream = new XStream(new DomDriver());Employee employee = (Employee) xStream.fromXML(personXml);return employee;}public static void main(String [] args) {Employee employee = new Employee();employee.setEmployeeId(1);employee.setEmployeeName("赵新国");employee.setDepartment("软件工程师");// 序列化String serialize = serialize(employee);System.out.println(serialize);// 反序列化Employee deserialize = deserialize(serialize);System.out.println(deserialize.toString());}}
三:创建Employee实体对象
package cn.micai.base.io;import java.io.Serializable;/*** 描述:* <p>** transient使用小结* 1.一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。* 2.transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。* 3.被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。** @author: 赵新国* @date: 2018/6/7 12:10*/
public class Employee implements Serializable {private static final long serialVersionUID = 1L;private int employeeId;private String employeeName;/*** 使用transient关键字,表示该字段不序列化*/private transient String department;public int getEmployeeId() {return employeeId;}public void setEmployeeId(int employeeId) {this.employeeId = employeeId;}public String getEmployeeName() {return employeeName;}public void setEmployeeName(String employeeName) {this.employeeName = employeeName;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}@Overridepublic String toString() {return "Employee{" +"employeeId=" + employeeId +", employeeName='" + employeeName + '\'' +", department='" + department + '\'' +'}';}
}
四:运行测试:
五:异常提醒:
上面的异常信息说明了,在解析XML的时候,找不到对应的实体对象,所以会报上面的错误,那我们就在解析的时候,告诉xStream,是解析那个对象,修改解析XML代码如下:
/*** 将XML反序列化还原为Java对象* @param personXml* @return*/public static Employee deserialize(String personXml) {// 将employee对象序列化为XMLXStream xStream = new XStream(new DomDriver());xStream.alias("employee", Employee.class);Employee employee = (Employee) xStream.fromXML(personXml);return employee;}
六:最终运行结果:
将Java对象序列化成XML格式,将XML反序列化还原为Java对象相关推荐
- 对象序列化成JSON格式
json是一种轻量级的数据交换语言,将对象序列化为json格式,可以在网络上传输,且各个平台都有成熟的工具,可以很快的将json反序列化为对应语言所需要的格式. 将java对象序列化为json格式关键 ...
- java 序列化成xml文件_将Java对象序列化成JSON和XML格式
1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...
- Java对象序列化乱码6_对象序列化成字符串乱码解决
问题描述: 将一个对象序列化成字符串后,字符串是乱码的,并且反序列化报错. 代码如下: import com.alibaba.fastjson.JSONObject; import org.sprin ...
- ISerializable与BinaryFormatter配合,实现将对象序列化成stream,可以保存或网络传输与反序列化
C#中ISerializable与BinaryFormatter配合,可以实现将对象序列化成stream,进而可以保存或网络传输以及进行反序列化. (注意: 这是一个年代久远了的知识点!) 以下是网上 ...
- XmlSerializer 对象序列化成XML 自定义编码格式(gb2312)
随着面向服务(SOA)的开发方式的兴起,客户端和服务端之间的消息传送,很多采用了XML的格式.但是大家在日常的开发中,应该会有这么种体验,就是组织xml格式的代码太繁琐,这篇随笔也是为了和大家分享下简 ...
- java接口返回xml格式_Java xml数据格式返回实现操作
前言:对于服务器后端开发,接口返回的数据格式一般要求都是json,但是也有使用xml格式 RequestBody注解 对于SpringMVC,很多人会认为接口方法使用@Controller搭配@Res ...
- 将python对象序列化成php能读取的格式(即能反序列化到对象)
转载自:http://my.oschina.net/zuoan001/blog/94914 代码如下: #coding:utf-8 # vim: encoding=utf-8:ft=python:et ...
- C#实现对象的Xml格式序列化及反序列化
要序列化的对象的类: [Serializable] public class Person { private string name; public string Name { get { retu ...
- com.fasterxml.jackson将对象序列化成json时,出现在json里的属性名称是怎么来的
如果不考虑用任何annotation指定出现在json string里的属性名称的话,默认的逻辑是将getter方法里,"get"之后的字符串的首字母小写. 比如: getJerD ...
最新文章
- java 局部内部类的理解
- Windows远程连接的实现
- pyrealsense2 设置摄像头曝光值 get_active_profile.get_device().query_sensors set_option() rs.option.exposure
- 五、开始学习Excel函数,效率快速提高
- linux下编译安装MySQL5.6新版本
- Green Plum测试报告
- mysql的压缩版安装
- restful levelsHATEOAS
- 《上海交通大学饮水思源paper(论文)板实用手册(第二版)》出炉
- 小程序:canvas绘制网络图片
- mysql的升序和降序
- linux cpufreq 设置
- 毕业设计-校园招聘系统
- 计算机网络的发展过程大致可以分为几个,计算机网络发展过程分几个阶段
- DDSM数据库转换图像格式——LJPEG转为PNG格式
- Web Audio API与WebSocket播放实时音频
- 校园生活旅游娱乐vlog篇
- Disruptor并发框架,核心组件RingBuffer
- java资产管理系统开源_Java固定资产管理系统源代码
- mysql创建三个表相互关联_mysql – 在三个表之间创建关系
热门文章
- 计算机网络之百个为什么?[期末简答必记]
- available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations
- python发送邮件(smtplib、email、zmail)
- 吐血整理MapStruct
- 【imessage苹果群发】apple推送技术开源需求源代码编写,IMESSage-VM插件
- React实现动态展示柱状图
- ASO提升App Store排名的8个技巧
- android 仿qq手写板涂鸦
- 微信小程序模板消息41003 page路径错误解决办法
- 无法安装linux系统安装驱动,我就纳闷了,Linux下Nvidia显卡驱动一直安装失败