XStream的使用说明
往期记录
XStream的使用说明1
XStream的使用说明2
XStream的使用说明3
XStream的使用说明4
Xstream自定义的转换器
代码示例
javabean
package com.vincient.test.xstreamDemo;
/**
* @Author: Vincient
* @Description:
* @Date: 2018/十一月/05
**/
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
转换器
package com.vincient.test.xstreamDemo;
import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
/**
* @Author: Vincient
* @Description:
* @Date: 2018/十一月/06
**/
public class PersonConverter implements Converter {
//把对象序列化成XML或Json
@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
Person person = (Person) source;
writer.startNode("姓名");
writer.setValue(person.getName());
writer.endNode();
writer.startNode("年龄");
writer.setValue(person.getAge() + "");
writer.endNode();
writer.startNode("转换器");
writer.setValue("自定义的转换器");
writer.endNode();
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
Person person = new Person("", -1);
reader.moveDown();
person.setName(reader.getValue());
reader.moveUp();
reader.moveDown();
person.setAge(Integer.parseInt(reader.getValue()));
reader.moveUp();
return person;
}
//定义转换器能转换的JavaBean类型
@Override
public boolean canConvert(Class type) {
return type.equals(Person.class);
}
}
测试类
package com.vincient.test.xstreamDemo;
import com.thoughtworks.xstream.XStream;
/**
* @Author: Vincient
* @Description:
* @Date: 2018/十一月/06
**/
public class Test13 {
public static void main(String[] args) {
Person bean = new Person("张三", 19);
XStream xstream = new XStream();
xstream.registerConverter(new PersonConverter());
String xml = xstream.toXML(bean);
System.out.println(xml);
bean = (Person) xstream.fromXML(xml);
System.out.println(bean);
}
}
运行结果
<com.vincient.test.xstreamDemo.Person>
<姓名>张三</姓名>
<年龄>19</年龄>
<转换器>自定义的转换器</转换器>
</com.vincient.test.xstreamDemo.Person>
Person{name='张三', age=19}
本文参考:
【1】XStream使用详解