使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。
和其他序列化工具相比,XStream 有三个突出的特点:
- XStream 不关心序列化/逆序列化的类的字段的可见性。
- 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
- 序列化/逆序列化的类不需要有默认构造函数。
不需要修改类,使用 XStream 就能直接序列化/逆序列化任何第三方类。
下面介绍一下XStream(http://xstream.codehaus.org )把POJO<<-->>XML/JSON的相互转化。
上代码例子
import java.util.ArrayList;
import java.util.List;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JsonHierarchicalStreamDriver;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class Test {
public static class Customer {
private int custId;
private String custName;
private List<Order> orders;
public int getCustId() {
return custId;
}
public void setCustId(int custId) {
this.custId = custId;
}
public String getCustName() {
return custName;
}
public void setCustName(String custName) {
this.custName = custName;
}
public List<Order> getOrders() {
return orders;
}
public void setOrders(List<Order> orders) {
this.orders = orders;
}
}
public static class Order {
private int orderId;
private String orderName;
private Product[] products;
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
public String getOrderName() {
return orderName;
}
public void setOrderName(String orderName) {
this.orderName = orderName;
}
public Product[] getProducts() {
return products;
}
public void setProducts(Product[] products) {
this.products = products;
}
}
public static class Product {
private int prodId;
private String prodName;
private double prodPrice;
public int getProdId() {
return prodId;
}
public void setProdId(int prodId) {
this.prodId = prodId;
}
public String getProdName() {
return prodName;
}
public void setProdName(String prodName) {
this.prodName = prodName;
}
public double getProdPrice() {
return prodPrice;
}
public void setProdPrice(double prodPrice) {
this.prodPrice = prodPrice;
}
}
public static void main(String[] args) {
Product p1 = new Product();
p1.setProdId(20100001);
p1.setProdName("苹果");
p1.setProdPrice(8888);
Product p2 = new Product();
p2.setProdId(20100002);
p2.setProdName("联想");
p2.setProdPrice(6000);
Product[] prods1 = new Product[] { p1, p2 };
Order order1 = new Order();
order1.setOrderId(101);
order1.setOrderName("笔记本");
order1.setProducts(prods1);
List<Order> orders = new ArrayList<Order>();
orders.add(order1);
Customer customer = new Customer();
customer.setCustId(100001);
customer.setCustName("张三");
customer.setOrders(orders);
XStream xstream = new XStream(new DomDriver());
xstream.alias("customer", Customer.class);
xstream.alias("order", Order.class);
xstream.alias("product", Product.class);
String xml = xstream.toXML(customer);// 转换成 xml 格式
System.out.println(xml); // 输出 xml 字符串
System.out.println("---------------------JSON-----------------------------");
// JSON
XStream xstream4JSON = new XStream(new JsonHierarchicalStreamDriver());
String json = xstream4JSON.toXML(customer);// 转换成 JSON 格式
System.out.println(json); // 输出 JSON 字符串
}
}
打印结果
<customer>
<custId>100001</custId>
<custName>张三</custName>
<orders>
<order>
<orderId>101</orderId>
<orderName>笔记本</orderName>
<products>
<product>
<prodId>20100001</prodId>
<prodName>苹果</prodName>
<prodPrice>8888.0</prodPrice>
</product>
<product>
<prodId>20100002</prodId>
<prodName>联想</prodName>
<prodPrice>6000.0</prodPrice>
</product>
</products>
</order>
</orders>
</customer>
---------------------JSON-----------------------------
{"Zbingo.grid.lookup.Test$Customer": {
"custId": 100001,
"custName": "张三",
"orders": [
{
"orderId": 101,
"orderName": "笔记本",
"products": [
{
"prodId": 20100001,
"prodName": "苹果",
"prodPrice": 8888.0
},
{
"prodId": 20100002,
"prodName": "联想",
"prodPrice": 6000.0
}
]
}
]
}}
本文介绍XStream工具的使用方法,演示如何将POJO对象序列化为XML或JSON格式,并提供了一个具体的代码示例。
5709

被折叠的 条评论
为什么被折叠?



