xstream学习,对象和xml之间转换,对象和json之间转换

来源:互联网 发布:深圳行知小学怎么样 编辑:程序博客网 时间:2024/05/25 05:36

1、测试对象

package domain;import java.util.Date;public class User {private String name;private int age;private Date birthday;private Car car;private List<Book> books;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;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public Car getCar() {return car;}public void setCar(Car car) {this.car = car;}public List<Book> getBooks() {return books;}public void setBooks(List<Book> books) {this.books = books;}@Overridepublic String toString() {return "User [name=" + name + ", age=" + age + ", birthday=" + birthday+ ", car=" + "Car [brand=" + car.getBrand() + ", price=" + car.getPrice() + ", factory="+ car.getFactory() + "]" + ", books=" + books + "]";}}

package domain;public class Book {private String bookName;private double price;private String author;public String getBookName() {return bookName;}public void setBookName(String bookName) {this.bookName = bookName;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}@Overridepublic String toString() {return "Book [bookName=" + bookName + ", price=" + price + ", author="+ author + "]";}}

package domain;public class Car {private String brand;private double price;private String factory;public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getFactory() {return factory;}public void setFactory(String factory) {this.factory = factory;}@Overridepublic String toString() {return "Car [brand=" + brand + ", price=" + price + ", factory="+ factory + "]";}}

2、对象到xml的转换

package test;import java.util.ArrayList;public class TestBean2XML {//XStream 同时可以转换list和mappublic static void main(String[] args) {//map2XML();//------Car对象-----//Car car = new Car();car.setBrand("宝马");car.setFactory("上汽");car.setPrice(500000);//------Car对象-----////------Book对象-----//Book book1 = new Book();book1.setBookName("语文");book1.setAuthor("张三");book1.setPrice(40.6);Book book2 = new Book();book2.setBookName("数学");book2.setAuthor("李四");book2.setPrice(23.5);Book book3 = new Book();book3.setBookName("英语");book3.setAuthor("王五");book3.setPrice(34);//------Book对象-----////------User对象-----//User user = new User();user.setName("小红");user.setAge(12);user.setBirthday(new Date());user.setCar(car);List<Book> list = new ArrayList<Book>();list.add(book1);list.add(book2);list.add(book3);user.setBooks(list);//------User对象-----////测试根据bean生成xmlXStream xStream = new XStream();//xStream.alias("user", User.class);//将类重命名xStream.aliasType("用户", User.class);xStream.alias("book", Book.class);xStream.alias("car", Car.class);/**///测试重命名属性/*xStream.aliasField("姓名", User.class, "name");xStream.aliasField("汽车价格", Car.class, "price");xStream.aliasField("作者", Book.class, "author");*///测试将字段申明在 xml的属性节点上,而非文本节点上,并重命名xStream.aliasAttribute(User.class, "name", "姓名");xStream.aliasAttribute(Car.class, "price", "汽车价格");xStream.aliasAttribute(Book.class, "author", "作者");String xml = xStream.toXML(user);//System.out.println(xml);}//将map转换为xmlpublic static void map2XML(){ Map<String, Book> map = new HashMap<String, Book>(); Book bean1 = new Book(); bean1.setBookName("语文"); bean1.setPrice(234); bean1.setAuthor("张三"); Book bean2 = new Book(); bean2.setBookName("语文"); bean2.setPrice(123); bean2.setAuthor("李四");         map.put("No.1", bean1);//put        map.put("No.3", bean2);//put        XStream xStream = new XStream();        xStream.alias("book", Book.class);        xStream.alias("key", String.class);        xStream.useAttributeFor(Book.class, "bookName");String xml = xStream.toXML(map);        System.out.println(xml);}}

3、xml到对象的转换

package test;import java.text.ParseException;public class TestXML2Bean {static String xml = "<user name = \"小红\">"+  "<age>12</age>"+  "<birthday>2015-07-14 14:33:42.567 UTC</birthday>"+  "<car>"+    "<brand>宝马</brand>"+    "<price>500000.0</price>"+    "<factory>上汽</factory>"+  "</car>"+  "<books>"+    "<book>"+      "<bookName>语文</bookName>"+      "<price>40.6</price>"+      "<author>张三</author>"+    "</book>"+    "<book>"+      "<bookName>数学</bookName>"+      "<price>23.5</price>"+      "<author>李四</author>"+    "</book>"+    "<book>"+      "<bookName>英语</bookName>"+      "<price>34.0</price>"+      "<author>王五</author>"+    "</book>"+  "</books>"+"</user>";public static void main(String[] args) {//这里一定要是用 DomDriver才能fromXMLXStream xStream = new XStream(new DomDriver());xStream.alias("user", User.class);xStream.alias("book", Book.class);xStream.alias("car", Car.class);xStream.registerConverter( new DateConverter());//如果是属性节点要同步设置xStreamxStream.aliasAttribute(User.class,"name","name");User user = (User)xStream.fromXML(xml);System.out.println(user.toString());}} class DateConverter  implements Converter {   @Override   public boolean canConvert(Class arg0) {      return Date.class == arg0;   }   @Override   public void marshal(Object arg0, HierarchicalStreamWriter arg1,     MarshallingContext arg2) {         }   @Override   public Object unmarshal(HierarchicalStreamReader reader,     UnmarshallingContext arg1) {          GregorianCalendar calendar = new GregorianCalendar();           SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd"); //格式化当前系统日期          try {                  calendar.setTime(dateFm.parse(reader.getValue()));          } catch (ParseException e) {                  throw new ConversionException(e.getMessage(), e);          }           return calendar.getTime();     }   }

4、对象到json的转换

package test;import java.io.Writer;public class TestBean2JSON {public static void main(String[] args) {Car car = new Car();car.setBrand("宝马");car.setFactory("上汽");car.setPrice(500000);// ------Car对象-----//// ------Book对象-----//Book book1 = new Book();book1.setBookName("语文");book1.setAuthor("张三");book1.setPrice(40.6);Book book2 = new Book();book2.setBookName("数学");book2.setAuthor("李四");book2.setPrice(23.5);Book book3 = new Book();book3.setBookName("英语");book3.setAuthor("王五");book3.setPrice(34);// ------Book对象-----//// ------User对象-----//User user = new User();user.setName("小红");user.setAge(12);user.setBirthday(new Date());user.setCar(car);List<Book> list = new ArrayList<Book>();list.add(book1);list.add(book2);list.add(book3);user.setBooks(list);//使用JettisonMappedXmlDriver驱动转换 /* XStream xstream = new XStream(new JettisonMappedXmlDriver()); xstream.setMode(XStream.NO_REFERENCES); *///使用JsonHierarchicalStreamDriver驱动转换// 删除根节点XStream xstream = new XStream(new JsonHierarchicalStreamDriver() {public HierarchicalStreamWriter createWriter(Writer out) {return new JsonWriter(out, JsonWriter.DROP_ROOT_MODE);}});xstream.alias("user", User.class);xstream.alias("book", Book.class);xstream.alias("car", Car.class);String xml = xstream.toXML(user);System.out.println(xml);}}

5、json到对象的转换

package test;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver;import domain.Book;import domain.Car;import domain.User;public class TestJSON2Bean {static String json = "{\"user\": {"+  "\"name\": \"小红\","+  "\"age\": 12,"+  "\"birthday\": \"2015-07-15 13:51:18.907 UTC\","+  "\"car\": {"+    "\"brand\": \"宝马\","+    "\"price\": 500000.0,"+    "\"factory\": \"上汽\""+  "},"+  "\"books\": ["+    "{"+      "\"bookName\": \"语文\","+      "\"price\": 40.6,"+      "\"author\": \"张三\""+    "},"+    "{"+      "\"bookName\": \"数学\","+      "\"price\": 23.5,"+      "\"author\": \"李四\""+    "},"+    "{"+      "\"bookName\": \"英语\","+      "\"price\": 34.0,"+      "\"author\": \"王五\""+    "}"+  "]"+"}}";static String json1 = "{\"books\": ["+    "{"+      "\"bookName\": \"语文\","+      "\"price\": 40.6,"+      "\"author\": \"张三\""+    "},"+    "{"+      "\"bookName\": \"数学\","+      "\"price\": 23.5,"+      "\"author\": \"李四\""+    "},"+    "{"+      "\"bookName\": \"英语\","+      "\"price\": 34.0,"+      "\"author\": \"王五\""+    "}"+  "]}";public static void main(String[] args) {System.out.println(json);XStream xstream = new XStream(new JettisonMappedXmlDriver());xstream.alias("user", User.class);xstream.alias("book", Book.class);    xstream.alias("car", Car.class);    User user = (User)xstream.fromXML(json);    //最后失败,貌似不能转 集合System.out.println(user.toString());}}



























0 0
原创粉丝点击