http://x-stream.github.io
XStream在运行时使用Java反射机制对要进行序列化的对象树的结构进行探索,并不需要对对象作出修改。XStream可以序列化内部字段,包括私private和final字段,并且支持非公开类以及内部类。
在缺省情况下,XStream不需要配置映射关系,对象和字段将映射为同名XML元素。但是当对象和字段名与XML中的元素名不同时,XStream支持指定别名。XStream支持以方法调用的方式,或是Java 标注的方式指定别名。
XStream在进行数据类型转换时,使用系统缺省的类型转换器。同时,也支持用户自定义的类型转换器。
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.jettison</groupId>
<artifactId>jettison</artifactId>
<version>1.4.1</version>
</dependency>
XStream的简单例子
XML序列化
@Data
class Department {
private String name;
private Integer account;
private String manager;
}
@Slf4j
public class XStreamService {
@Test
public void beanToXmlTest(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("18"));
department.setManager("艾达");
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
String xml = xStream.toXML(department);
log.info("序列化:\n{}", xml);
Department department1 = (Department)xStream.fromXML(xml);
log.info("反序列化:\n{}", department1);
}
}
//执行结果
XML序列化:
<Department>
<name>技术部</name>
<account>18</account>
<manager>艾达</manager>
</Department>
XML反序列化:
Department(name=技术部, account=18, manager=艾达)
Json序列化
@Data
class Department {
private String name;
private Integer account;
private String manager;
}
@Slf4j
public class XStreamService {
@Test
public void beanToJsonString(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("18"));
department.setManager("艾达");
XStream xStream = new XStream(new JettisonMappedXmlDriver());
xStream.setMode(XStream.NO_REFERENCES);
String json = xStream.toXML(department);
log.info("Json序列化:\n{}", json);
Department department1 = (Department)xStream.fromXML(json);
log.info("Json反序列化:\n{}", department1);
}
}
//执行结果
Json序列化:
{"com.dayday.up.store.service.biz.bo.Department":{"name":"技术部","account":18,"manager":"艾达"}}
Json反序列化:
Department(name=技术部, account=18, manager=艾达)
@Data
public class Department {
private String name;
private Integer account;
private String manager;
}
@Slf4j
public class XStreamService {
@Test
public void beanToXml(){
Department department = new Department2();
department.setName("技术部");
department.setAccount(new Integer("19"));
department.setManager("艾迪");
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
xStream.alias("DEPARTMENT", Department.class);
xStream.aliasField("NAME", Department.class,"name");
xStream.aliasField("ACCOUNT", Department.class,"account");
xStream.aliasField("MANAGE", Department.class,"manager");
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
//运行结果
XML序列化:
<DEPARTMENT>
<NAME>技术部</NAME>
<ACCOUNT>19</ACCOUNT>
<MANAGE>艾迪</MANAGE>
</DEPARTMENT>
@Data
@XStreamAlias(value = "department")
public class Department {
@XStreamAlias(value = "name")
private String name;
@XStreamAlias(value = "account")
private Integer account;
@XStreamAlias(value = "manager")
private String manager;
}
@Slf4j
public class XStreamService {
@Test
public void beanToXmlTest(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("19"));
department.setManager("艾迪");
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
//运行结果
XML序列化:
<department>
<name>技术部</name>
<account>18</account>
<manager>艾达</manager>
</department>
@Data
@XStreamAlias(value = "department")
public class Department {
@XStreamAlias(value = "company")
private String company;
@XStreamAlias(value = "name")
private String name;
@XStreamAlias(value = "account")
private Integer account;
@XStreamAlias(value = "manager")
private String manager;
}
@Slf4j
public class XStreamService {
@Test
public void beanAndXml(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("21"));
department.setManager("艾迪");
department.setCompany("广州唯品会");
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
xStream.useAttributeFor(Department.class,"company");
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
XML序列化:
<department company="广州唯品会">
<name>技术部</name>
<account>22</account>
<manager>艾迪</manager>
</department>
@Data
@XStreamAlias(value = "department")
public class Department {
@XStreamAsAttribute
@XStreamAlias(value = "company")
private String company;
@XStreamAlias(value = "name")
private String name;
@XStreamAlias(value = "account")
private Integer account;
@XStreamAlias(value = "manager")
private String manager;
}
@Slf4j
public class XStreamService{
@Test
public void beanAndXml(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("22"));
department.setManager("艾迪");
department.setCompany("广州唯品会");
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
XML序列化:
<department company="广州唯品会">
<name>技术部</name>
<account>22</account>
<manager>艾迪</manager>
</department>
@Data
@XStreamAlias(value = "department")
public class Department {
@XStreamAsAttribute
@XStreamAlias(value = "company")
private String company;
@XStreamAlias(value = "name")
private String name;
@XStreamAlias(value = "account")
private Integer account;
@XStreamAlias(value = "manager")
private String manager;
@XStreamAlias(value = "employeeList")
private List<Employee> employeeList;
}
@Data
@XStreamAlias("employee")
public class Employee {
@XStreamAlias("name")
private String name;
@XStreamAlias("position")
private String position;
public Employee(String name, String position) {
this.name = name;
this.position = position;
}
}
@Slf4j
public class XStreamService {
@Test
public void beanAndXml(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("22"));
department.setManager("艾迪");
department.setCompany("广州唯品会");
Employee employee = new Employee("张三","开发");
Employee employee1 = new Employee("李四","测试");
List<Employee> employeeList = new ArrayList<>();
employeeList.add(employee);
employeeList.add(employee1);
department.setEmployeeList(employeeList);
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
xStream.addImplicitCollection(Department.class,"employeeList");
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
//执行结果,没有生成节点employeeList
XML序列化:
<department company="广州唯品会">
<name>技术部</name>
<account>22</account>
<manager>艾迪</manager>
<employee>
<name>张三</name>
<position>开发</position>
</employee>
<employee>
<name>李四</name>
<position>测试</position>
</employee>
</department>
@Data
@XStreamAlias(value = "department")
public class Department {
@XStreamAsAttribute
@XStreamAlias(value = "company")
private String company;
@XStreamAlias(value = "name")
private String name;
@XStreamAlias(value = "account")
private Integer account;
@XStreamAlias(value = "manager")
private String manager;
@XStreamAlias(value = "employeeList")
@XStreamImplicit
private List<Employee> employeeList;
}
@Data
@XStreamAlias("employee")
public class Employee {
@XStreamAlias("name")
private String name;
@XStreamAlias("position")
private String position;
public Employee(String name, String position) {
this.name = name;
this.position = position;
}
}
@Slf4j
public class XStreamService {
@Test
public void beanAndXml(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("22"));
department.setManager("艾迪");
department.setCompany("广州唯品会");
Employee employee = new Employee("张三","开发");
Employee employee1 = new Employee("李四","测试");
List<Employee> employeeList = new ArrayList<>();
employeeList.add(employee);
employeeList.add(employee1);
department.setEmployeeList(employeeList);
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
//执行结果,没有生成节点employeeList
XML序列化:
<department company="广州唯品会">
<name>技术部</name>
<account>22</account>
<manager>艾迪</manager>
<employee>
<name>张三</name>
<position>开发</position>
</employee>
<employee>
<name>李四</name>
<position>测试</position>
</employee>
</department>
@Data
@XStreamAlias(value = "department")
public class Department {
@XStreamAsAttribute
@XStreamAlias(value = "company")
private String company;
@XStreamAlias(value = "name")
private String name;
@XStreamAlias(value = "account")
private Integer account;
@XStreamAlias(value = "manager")
private String manager;
}
@Slf4j
public class XStreamService {
@Test
public void beanAndXml(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("26"));
department.setManager("艾迪");
department.setCompany("广州唯品会");
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
xStream.omitField(Department.class, "account");
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
//执行结果,没有生成account节点
XML序列化:
<department company="广州唯品会">
<name>技术部</name>
<manager>艾迪</manager>
</department>
@Data
@XStreamAlias(value = "department")
public class Department {
@XStreamAsAttribute
@XStreamAlias(value = "company")
private String company;
@XStreamAlias(value = "name")
private String name;
@XStreamAlias(value = "account")
@XStreamOmitField
private Integer account;
@XStreamAlias(value = "manager")
private String manager;
}
@Slf4j
public class XStreamService {
@Test
public void beanAndXml(){
Department department = new Department();
department.setName("技术部");
department.setAccount(new Integer("26"));
department.setManager("艾迪");
department.setCompany("广州唯品会");
XStream xStream = new XStream();
xStream.processAnnotations(Department.class);
String xml = xStream.toXML(department);
log.info("XML序列化:\n{}", xml);
}
}
//执行结果,没有生成account节点
XML序列化:
<department company="广州唯品会">
<name>技术部</name>
<manager>艾迪</manager>
</department>
https://www.yiibai.com/xstream
https://www.cnblogs.com/LiZhiW/p/4313493.html