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中call,apply,bind方法的总结
why?call,apply,bind干什么的?为什么要学这个? 一般用来指定this的环境,在没有学之前,通常会有这些问题. var a = { user: "小马扎", fn: ...
- ts中interface与class的区别
interface -- 接口只声明成员方法,不做实现. class -- 类声明并实现方法. 那么接口有什么用呢?设想如下需求: 要实现一个print函数,它将传入的对象打印出来.在实际实现上,它将 ...
- hadoop安装和配置
这里只是涉及了hadoop的一些思路,所以完全分布式配置文件并没有哦!以后会把详细的配置过程和使用环境补充在另外一篇博客中 hadoop的安装: --------------------------- ...
- SQLAlchemy基础操作一
用前安装 pip3 install sqlalchemy ORM ORM就是运用面向对象的知识,将数据库中的每个表对应一个类,将数据库表中的记录对应一个类的对象.将复杂的sql语句转换成类和对象的操作 ...
- PE文件解析器的编写(二)——PE文件头的解析
之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只 ...
- Jenkins-Dingding Notification Plugin 配置
具体内容请移步Jenkins官网或作者Github,本文仅为实践分享,记录几个小坑! 感谢插件作者的贡献! 转载注明出处:http://www.cnblogs.com/ityoung/p/648915 ...
- 跟我一起读postgresql源码(十)——Executor(查询执行模块之——Scan节点(下))
接前文跟我一起读postgresql源码(九)--Executor(查询执行模块之--Scan节点(上)) ,本篇把剩下的七个Scan节点结束掉. T_SubqueryScanState, T_Fun ...
- dead loop、continue & break、while...else语句
Dead loop 死循环,一经触发就会永远运行下去. continue & break 如果在循环过程中,因为某些原因,你不想继续循环了,就要用到break 或 continue语句. br ...
- cs231n spring 2017 lecture1 Introduction to Convolutional Neural Networks for Visual Recognition 听课笔记
1. 生物学家做实验发现脑皮层对简单的结构比如角.边有反应,而通过复杂的神经元传递,这些简单的结构最终帮助生物体有了更复杂的视觉系统.1970年David Marr提出的视觉处理流程遵循这样的原则,拿 ...
- bzoj:1575: [Usaco2009 Jan]气象牛Baric
Description 为了研究农场的气候,Betsy帮助农夫John做了N(1 <= N <= 100)次气压测量并按顺序记录了结果M_1...M_N(1 <= M_i <= ...