xstream转换Map和List


废话不说了,就是不想定义太多的java bean,有时候需求比较简单,就想着直接用java的集合类来替换太多的java bean定义,看下面的代码例子

[java]
  1. package org.garbagecan.xstreamstudy.converter;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8. import com.thoughtworks.xstream.XStream;  
  9. import com.thoughtworks.xstream.io.xml.DomDriver;  
  10.   
  11. public class TestMapListConverter {  
  12.     @SuppressWarnings({ "rawtypes""unchecked" })  
  13.     public static void main(String[] args) {  
  14.         XStream xstream = new XStream(new DomDriver());  
  15.         Map map = new HashMap();  
  16.           
  17.         List list1 = new ArrayList();  
  18.         list1.add(new T("a1""b1""c1"));  
  19.         list1.add(new T("a2""b2""c2"));  
  20.         List list2 = new ArrayList();  
  21.         list2.add(new T("a3""b3""c3"));  
  22.         list2.add(new T("a4""b4""c4"));  
  23.         map.put("t1", list1);  
  24.         map.put("t2", list2);  
  25.           
  26.         xstream.alias("classes", Map.class);  
  27.         xstream.alias("class", Map.Entry.class);  
  28.         xstream.alias("name", String.class);  
  29.           
  30.         xstream.alias("fields", List.class);  
  31.         xstream.alias("field", T.class);  
  32.         xstream.aliasAttribute(T.class"a""a");  
  33.         xstream.aliasAttribute(T.class"b""b");  
  34.         xstream.aliasAttribute(T.class"c""c");  
  35.           
  36.         System.out.println(xstream.toXML(map));  
  37.   
  38.         System.out.println((Map)xstream.fromXML(xstream.toXML(map)));  
  39.     }  
  40. }  
  41.   
  42. class T {  
  43.     public T(String a, String b, String c) {  
  44.         this.a = a;  
  45.         this.b = b;  
  46.         this.c = c;  
  47.     }  
  48.     private String a;  
  49.     private String b;  
  50.     private String c;  
  51.     public String getA() {  
  52.         return a;  
  53.     }  
  54.     public void setA(String a) {  
  55.         this.a = a;  
  56.     }  
  57.     public String getB() {  
  58.         return b;  
  59.     }  
  60.     public void setB(String b) {  
  61.         this.b = b;  
  62.     }  
  63.     public String getC() {  
  64.         return c;  
  65.     }  
  66.     public void setC(String c) {  
  67.         this.c = c;  
  68.     }  
  69.     @Override  
  70.     public String toString() {  
  71.         return org.apache.commons.lang.builder.ToStringBuilder.reflectionToString(this);  
  72.     }  
  73. }  

运行上面的例子得到的xml内如如下:

[html]
  1. <classes>  
  2.   <class>  
  3.     <name>t2</name>  
  4.     <fields>  
  5.       <field a="a3" b="b3" c="c3"/>  
  6.       <field a="a4" b="b4" c="c4"/>  
  7.     </fields>  
  8.   </class>  
  9.   <class>  
  10.     <name>t1</name>  
  11.     <fields>  
  12.       <field a="a1" b="b1" c="c1"/>  
  13.       <field a="a2" b="b2" c="c2"/>  
  14.     </fields>  
  15.   </class>  
  16. </classes>  
得到的java对象内容如下:

[java]
  1. {t2=[org.garbagecan.xstreamstudy.converter.T@b166b5[a=a3,b=b3,c=c3], org.garbagecan.xstreamstudy.converter.T@1837697[a=a4,b=b4,c=c4]], t1=[org.garbagecan.xstreamstudy.converter.T@1decdec[a=a1,b=b1,c=c1], org.garbagecan.xstreamstudy.converter.T@a1807c[a=a2,b=b2,c=c2]]}  

相关内容