概述

  最新整理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. SUCTF 2016 : dMd

    这个题可以说是比较坑了(还不是我很弱...) Linux跑一下: 要输密码 ida打开看看: int __cdecl main(int argc, const char **argv, const c ...

  2. 尝试dapper和postgresql

    大多数地方和其他数据库(MySQL)没有什么不同.只有几点要注意: 1.PostgreSQL表名和字段是区分大小写的,大小写不对会说字段不存在 2.插入Json数据时,要在字符串后面加上::json ...

  3. Atcoder Beginner Contest 124 解题报告

    心态爆炸.本来能全做出来的.但是由于双开了Comet oj一个比赛,写了ABC就去搞那个的B题 还被搞死了. 回来写了一会D就过了.可惜比赛已经结束了.真的是作死. A - Buttons #incl ...

  4. [powershell] 批量重命名,修改文件名中的部分字符串

    实例:替换一个目录下所有的字幕文件从720p到1080p ls $Path -Recurse |ForEach-Object{Rename-Item $_.FullName $_.FullName.R ...

  5. Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)

    题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000, ...

  6. django restframework 跨域访问

    场景介绍: 在Django开发过程中,使用前后端分离设计的站点越来越多,如Django+VUE.Django+Angular.在使用DjangoRestFramework开发API的过程中,由于前端站 ...

  7. 当使用makemigrations时报错No changes detected

    在修改了models.py后,有些用户会喜欢用python manage.py makemigrations生成对应的py代码. 但有时执行python manage.py makemigration ...

  8. C#连接和操作Oracle数据

    最近业务需要读取远程Oracle数据库的数据,这里简单记录一下. 这里采用的是Oracle.ManagedDataAccess方式连接Oracle数据库,这种方式有几个优点:①不用安装Oracle客户 ...

  9. 如何给pdf文件中的一页添加水印

    如题所述,项目需求.要把一份文件尾部加上签章,首先想到的就是水印. 开始试过了无论是word还是wps所谓的水印其实就是页脚或页眉统一格式,无法单一一个页面操作,要加所有的页面都有. 纵然wps有个功 ...

  10. LFYZ-OJ ID: 1020 过河卒(NOIP2002)

    过河卒 Proble Description 如图,A 点有一个过河卒,需要走到目标 B 点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃 ...