`

利用XStream做POJO到XML/JSON的转换

    博客分类:
  • JAVA
阅读更多

 

 

使用 XStream 不用任何映射就能实现多数 Java 对象的序列化。在生成的 XML 中对象名变成了元素名,类中的字符串组成了 XML 中的元素内容。使用 XStream 序列化的类不需要实现 Serializable 接口。XStream 是一种序列化工具而不是数据绑定工具,就是说不能从 XML 或者 XML Schema Definition (XSD) 文件生成类。

和其他序列化工具相比,XStream 有三个突出的特点:

  1. XStream 不关心序列化/逆序列化的类的字段的可见性。
  2. 序列化/逆序列化类的字段不需要 getter 和 setter 方法。
  3. 序列化/逆序列化的类不需要有默认构造函数。

不需要修改类,使用 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
        }
      ]
    }
  ]
}}
 

 

 

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics