概述

  最新整理Java方面XML序列化和反序列化的常用工具类,找到了dom4j和xstream。dom4j相对小巧,很好的解读xml;但是对于对象的xml序列化和反序列化,我还是比较喜欢xsteam(ps:个人爱好吧),这里整理xstream的入门基础知识;

使用

引用maven内容

        <dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.</version>
</dependency>

别名配置的方式

1、可以通过类注解实现@XStreamAlias,比如XStreamAlias("book");

采用这种方式的时候,需要注意xStream实例化的时候,加上 xStream.processAnnotations(Bookstore.class); //通过注解方式的,一定要有这句话

2、可以通过配置Xstream设置实现;比如xStream.alias("book",book.class);

其他注意事项

1、将某一个类的属性,作为xml头信息的属性,而不是子节点  ,需要使用useAttributeFor,比如:xStream.useAttributeFor(book.class,"id");

2、隐藏跟属性节点的时候,需要使用addImplicitCollection,比如:xStream.addImplicitCollection(Bookstore.class,"books");

3、在Spring Boot下使用,XML转对象时,同一个类无法进行转换,原因是因为SpringBoot重新加载了对象;若未指定classloader的时候,SpringBoot未正确使用classloader,需要指定classloader,需要在方法中指定加载的类,添加如下代码: xstream.setClassLoader(clazz.getClassLoader());

完整代码如下:

Bookstore类:

package com.dbgo.xmldemo;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import java.util.List;
@XStreamAlias("bookstore")
public class Bookstore {
private List<book> books; public Bookstore(List<book> books) {
this.books = books;
}
public List<book> getBooks() {
return books;
}
public void setBooks(List<book> books) {
this.books = books;
}
}

book类

package com.dbgo.xmldemo;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("book")
public class book {
private Integer id;
private String name;
private String author;
private String year;
private double price; public book(Integer id, String name, String author, String year, double price) {
this.id = id;
this.name = name;
this.author = author;
this.year = year;
this.price = price;
} ....省略get/set属性....
}

使用类注解解析方法

   protected static void XstreamDemo(String xmsource)
{
XStream xStream=new XStream();
xStream.addImplicitCollection(Bookstore.class,"books");
xStream.processAnnotations(Bookstore.class); //通过注解方式的,一定要有这句话
xStream.processAnnotations(book.class);
     xstream.setClassLoader(Bookstore.class.getClassLoader());//在spring boot一定加上这句话
Object bookstore2= xStream.fromXML(xmsource); String xmocontent=xStream.toXML(bookstore2);
System.out.println(xmocontent);
//Bookstore bookstore1= (Bookstore)xStream.fromXML(xmocontent); }

使用非类注解方法

   protected static void XstreamDemo(String xmsource)
{
XStream xStream=new XStream();
xStream.alias("book",book.class);
xStream.alias("bookstore",Bookstore.class);
xStream.useAttributeFor(book.class,"id");
xStream.addImplicitCollection(Bookstore.class,"books");
Object bookstore2= xStream.fromXML(xmsource);
Bookstore bookstore=new Bookstore(new ArrayList<>());
bookstore.getBooks().add(new book(,"zhang","hi","",));
String xmocontent=xStream.toXML(bookstore);
System.out.println(xmocontent);
//Bookstore bookstore1= (Bookstore)xStream.fromXML(xmocontent); }

xml报文如下

String xmlSource="<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<bookstore>" +
" <book id=\"1\">" +
" <name>冰与火之歌</name>" +
" <author>乔治马丁</author>" +
" <year>2014</year>" +
" <price>89</price>" +
" </book>" +
" <book id=\"2\">" +
" <name>安徒生童话</name>" +
" <year>2004</year>" +
" <price>77</price>" +
" <author>English</author>" +
" </book> " +
"</bookstore>";

参考博客

java生成解析xml的另外两种方法Xstream https://www.cnblogs.com/happyPawpaw/p/4972650.html

java+xstream实现xml序列化  https://blog.csdn.net/jaryle/article/details/54893582

Bookstore.class

xstream实现对象的序列化和反序列化(Java)的更多相关文章

  1. Java对象的序列化与反序列化-Json篇

    说到Java对象的序列化与反序列化,我们首先想到的应该是Java的Serializable接口,这玩意在两个系统之间的DTO对象里面可能会用到,用于系统之间的数据传输.或者在RPC(远程方法调用)时可 ...

  2. java中对象的序列化和反序列化

    [对象的序列化和反序列化 ] 1.定义:序列化--将对象写到一个输出流中.反序列化则是从一个输入流中读取一个对象.类中的成员必须是可序列化的,而且要实现Serializable接口,这样的类的对象才能 ...

  3. Java对象的序列化与反序列化

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等.在网络传输过程中,可以是字节或是 ...

  4. Java对象的序列化和反序列化[转]

    Java基础学习总结--Java对象的序列化和反序列化 一.序列化和反序列化的概念 把对象转换为字节序列的过程称为对象的序列化.把字节序列恢复为对象的过程称为对象的反序列化. 对象的序列化主要有两种用 ...

  5. 【Java IO流】对象的序列化和反序列化

    对象的序列化和反序列化 1)对象序列化,就是将Object对象转换成byte序列,反之叫对象的反序列化. 2)序列化流(ObjectOutputStream),是字节的过滤流—— writeObjec ...

  6. 第12讲-Java中的IO操作及对象的序列化与反序列化

    1.知识点 1.1.课程回顾 1.2.本章重点 1.2.1  io操作 1.2.2  对象的序列化与反序列化 2.具体内容 2.1.Java IO 2.1.1.什么是IO IO其实就是输入.输出 I ...

  7. 一文带你全面了解java对象的序列化和反序列化

    摘要:这篇文章主要给大家介绍了关于java中对象的序列化与反序列化的相关内容,文中通过详细示例代码介绍,希望能对大家有所帮助. 本文分享自华为云社区<java中什么是序列化和反序列化?>, ...

  8. 对象的序列化与反序列化---IO学习笔记(四)

    对象的序列化,反序列化 对象的序列化: 就是将Object转换成byte序列 对象的反序列化: 将byte序列转换成Object 序列化流.反序列化流 序列化流(ObjectOutputStream) ...

  9. ObjectOutputStream和ObjectInputStream对对象进行序列化和反序列化

    1 Java序列化和反序列化简介 Java序列化是指把对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为java对象的过程. 我们把对象序列化成有序字节流,保存到本地磁盘或者Redis等 ...

随机推荐

  1. 进程Process之join、daemon(守护)、terminate(关闭)、multiprocessing之锁、信号量和事件

    一.Process 参数介绍: 1 group参数未使用,值始终为None 2 target表示调用对象,即子进程要执行的任务 3 args表示调用对象的位置参数元组,args=(1,2,'a',) ...

  2. Vue组件以及组件之间的通信

    一.组件的注册 1. 全局组件注册 1. 注册基本语法Vue.component Vue.component("my_header", { template: `<div&g ...

  3. 从备份文件bak中识别SQL Server的版本

    SQLServer 的备份文件是以.bak 为后缀的文件,如果想要通过备份文件查看数据库版本,通常的做法就是把数据库还原,但是在还原的过程,如果不是相同的数据库版本,就会导致无法还原: 在数据库中,低 ...

  4. AtCoder Grand Contest 012

    AtCoder Grand Contest 012 A - AtCoder Group Contest 翻译 有\(3n\)个人,每一个人有一个强大值(看我的假翻译),每三个人可以分成一组,一组的强大 ...

  5. Caused by: java.lang.ClassNotFoundException: org.springframework.web.filter.FormContentFilter

    又是一个报错,我写代码真的是可以,所有的bug都会被我遇到,所有的问题我都能踩一遍,以前上学的时候同学就喜欢问我问题,因为他们遇到的问题,我早就遇到了......... 看看报错内容: 2019-04 ...

  6. CSS BFC(格式化上下文)深入理解

    什么是BFC 在解释BFC之前,先说一下文档流.我们常说的文档流其实分为定位流.浮动流和普通流三种.而普通流其实就是指BFC中的FC.FC是formatting context的首字母缩写,直译过来是 ...

  7. mysql用户管理与备份

    用户管理 我们知道在Mysql中root用户是最高权限的用户,其他用户的创建和权限授予都是通过root用户来操作的 查看用户 在root用户界面下 select user,host,password ...

  8. [物理学与PDEs]第3章第2节 磁流体力学方程组 2.2 考虑到电磁场的存在对流体力学方程组的修正

    1.  连续性方程 $$\bex \cfrac{\p \rho}{\p t}+\Div(\rho{\bf u})=0.  \eex$$ 2.  动量守恒方程 $$\bex \cfrac{\p }{\p ...

  9. H5——弹性盒

    [flex 弹性盒布局] * 1.给父容器添加display:flex/inline-flex;属性 * 2.父容器可以使用的属性值有: * ① flex-direction 属性决定主轴的方向(即项 ...

  10. Django2.1配置xadmin2.0

    系统:Ubuntu18.04 环境:py3.6, django2.17, xadmin-django2.0 xadmin-django2.0下载:xadmin2.0(进入github后,在Branch ...