Java XML 序列化和反序列化
Utils 类:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.Serializable;
import java.io.UnsupportedEncodingException; import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller; /**
* Created by Leo on 2017/2/10.
*/
public class XmlUtils {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static <T extends Serializable> T deserialize(String xmlFilePath, Class clazz)
throws FileNotFoundException, JAXBException, UnsupportedEncodingException {
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller unmarshal = context.createUnmarshaller();
FileInputStream fis = new FileInputStream(xmlFilePath);
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
return (T) unmarshal.unmarshal(isr);
} public static <T> void serialize(T obj, String xmlFilePath) {
FileWriter writer = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshal = context.createMarshaller();
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshal.marshal(obj, System.out);
writer = new FileWriter(xmlFilePath);
marshal.marshal(obj, writer);
} catch (Exception e) {
e.printStackTrace();
}
} }
根目录对应的类:
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
import java.util.*; /**
* Created by Leo on 2017/2/10.
*/
@XmlRootElement(name = "WorkflowProcesses")
public class WorkflowProcessList implements Serializable { @XmlElement(name = "WorkflowProcess")
private List<WorkflowProcess> items; public WorkflowProcessList() {
this.items = new ArrayList<WorkflowProcess>();
} public void addProcess(WorkflowProcess process) {
this.items.add(process);
} public Iterator<WorkflowProcess> iterator() {
return items.iterator();
} public List<WorkflowProcess> getItems() {
return this.items;
} }
子类:
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; @XmlType(propOrder = { "id", "name", "activities", "transitions" })
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "wp")
public class WorkflowProcess implements Serializable { @XmlAttribute(name = "Id")
private String id; @XmlAttribute(name = "Name")
private String name; @XmlElementWrapper(name = "Activities")
@XmlElement(name = "Activity")
private List<Activity> activities; @XmlElementWrapper(name = "Transitions")
@XmlElement(name = "Transition")
private List<Transition> transitions; public WorkflowProcess() {
this.activities = new ArrayList<Activity>();
this.transitions = new ArrayList<Transition>();
} public String getName() {
return this.name;
} public void setName(String value) {
this.name = value;
} public String getId() {
return this.id;
} public void setId(String value) {
this.id = value;
} public void addActivity(Activity activity) {
this.activities.add(activity);
} public List<Activity> getActivities() {
return this.activities;
} public List<Transition> getTransitions() {
return this.transitions;
} }
子类2:
import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; /**
* Created by Leo on 2017/2/10.
*/
@XmlType(name = "Activity", propOrder = { "id", "type", "name", "width", "height", "coordinate" })
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public class Activity implements Serializable { @XmlAttribute(name = "Id")
private String id; @XmlAttribute(name = "Type")
private String type; @XmlAttribute(name = "Name")
private String name; @XmlAttribute(name = "Width")
private int width; @XmlAttribute(name = "Height")
private int height; @XmlElement(name = "Coordinates")
private Coordinate coordinate; public Activity() { } public Activity(String id, String type, String name) {
this.id = id;
this.type = type;
this.name = name;
} public String getId() {
return this.id;
} public void setId(String value) {
this.id = value;
} public String getType() {
return this.type;
} public void setType(String value) {
this.type = value;
} public String getName() {
return this.name;
} public void setName(String value) {
this.name = value;
} public Coordinate getCoordinate() {
return this.coordinate;
} public void setCoordinate(Coordinate value) {
this.coordinate = value;
} public int getWidth() {
return this.width;
} public void setWidth(int value) {
this.width = value;
} public int getHeight() {
return this.height;
} public void setHeight(int value) {
this.height = value;
} }
子类3:
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType; /**
* Created by Leo on 2017/2/10.
*/
@XmlType(name = "Transition", propOrder = { "id", "from", "to", "name", "coordinate" })
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement()
public class Transition { @XmlAttribute(name = "Id")
private String id; @XmlAttribute(name = "From")
private String from; @XmlAttribute(name = "To")
private String to; @XmlAttribute(name = "Name")
private String name; @XmlElement(name = "Coordinates")
private Coordinate coordinate; public String getId() {
return this.id;
} public void setId(String value) {
this.id = value;
} public String getFrom() {
return this.from;
} public void setFrom(String value) {
this.from = value;
} public String getTo() {
return this.to;
} public void setTo(String value) {
this.to = value;
} public String getName() {
return this.name;
} public void setName(String value) {
this.name = value;
} public Coordinate getCoordinate() {
return this.coordinate;
} public void setCoordinate(Coordinate value) {
this.coordinate = value;
} }
Java XML 序列化和反序列化的更多相关文章
- Java 中序列化与反序列化
一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...
- java 对象序列化与反序列化
Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为 ...
- XML 序列化与反序列化
XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- C#的XML序列化及反序列化
webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...
- .NET XML序列化与反序列化
闲着没事,写了两个通用的XML序列化与反序列化的方法. 贴出来当作笔记吧! /// <summary> /// XML序列化 /// </summary> /// <ty ...
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中 ...
- c# XML序列化与反序列化
c# XML序列化与反序列化 原先一直用BinaryFormatter来序列化挺好,可是最近发现在WinCE下是没有办法进行BinaryFormatter操作,很不爽,只能改成了BinaryWrite ...
- Xml序列化、反序列化帮助类
之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 /// <summary> / ...
随机推荐
- js基础查漏补缺(更新)
js基础查漏补缺: 1. NaN != NaN: 复制数组可以用slice: 数组的sort.reverse等方法都会改变自身: Map是一组键值对的结构,Set是key的集合: Array.Map. ...
- VS2010 Extension实践(2)
在上一篇(VS2010 Extension (1)实践)里,主要展示了如何使用MEF扩展VS2010,来扩展编辑控制和展现自己的UI:在实现QuickToolbar的时候,发现MEF仅仅提供了很基本的 ...
- leetcode — word-break-ii
import java.util.*; /** * Source : https://oj.leetcode.com/problems/word-break-ii/ * * Given a strin ...
- Java Proxy和CGLIB动态代理原理
动态代理在Java中有着广泛的应用,比如Spring AOP,Hibernate数据查询.测试框架的后端mock.RPC,Java注解对象获取等.静态代理的代理关系在编译时就确定了,而动态代理的代理关 ...
- Travis CI实现持续部署
安装Ruby 2.0以上版本并安装travis的命令行工具 可以看出我的已经是安装好的(Ubuntu 16.04.3 LTS 系统) ruby -v ruby --) [x86_64-linux-gn ...
- css实现网格背景
只使用一个渐变时,我们能创建的图案并不多,当我们把多个渐变图案组合起来,让他们透过彼此的透明区域显现时,神奇的事情就发生了!我们首先想到的是把水平和水质条纹叠加起来,就可以得到各种各样的网格. 1. ...
- 第六章:Python基础の反射与常用模块解密
本课主题 反射 Mapping 介绍和操作实战 模块介绍和操作实战 random 模块 time 和 datetime 模块 logging 模块 sys 模块 os 模块 hashlib 模块 re ...
- redux入门指南
前言:大概一个月没有写博客了,这两天正好是周末,就写点东西来梳理下之前几个月的所写与所得; 大概两个月前,学习了一下 redux ,还是一点难度的,花了我一天的时间来搞明白他, 但是都没怎么记录,今天 ...
- MariaDB扩展特性--虚拟列
存在于表中的列,它们的值是根据确定的表达式或者是根据表中其他列的值自动计算的. 虚拟列有两种,分别对应了定义虚拟列的修饰关键词: 'VIRTUAL'修饰词含义为该虚拟列的值会在查询的时候计算生成. ' ...
- 关于获得当前的index的方法
每日一句English(start from today): In the previous section we just displayed a list of string entered st ...