Xstream --- 转换器

XStream允许从无到有写入转换器,这样开发人员可以编写一个完全新的实现,如何对象序列化到XML,反之亦然。 转换器接口提供了三种方法。

  • canConvert - 检查支持的对象类型的序列化。

  • marshal - 序列化对象到XML。

  • unmarshal - 从XML对象反序列化


package com.xstream.convert;

import java.util.ArrayList;
import java.util.List;

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;
import com.xstream.vo1.Address;
import com.xstream.vo1.Addresses;

public class XstreamConvert implements Converter{
    //检查支持的对象类型的序列化
    public boolean canConvert(Class object) {
          return object.equals(Addresses.class);
    }
    //序列化对象到XML
    public void marshal(Object value, HierarchicalStreamWriter writer,MarshallingContext context) {
          Addresses addresses = (Addresses) value;
          List list = addresses.getListAdd();
          writer.startNode("name");
          writer.setValue(addresses.getListAdd().get(0).getPlace() + "," + addresses.getListAdd().get(0).getAddType());
          writer.endNode();
        
    }
    //从XML对象反序列化
    public Object unmarshal(HierarchicalStreamReader reader,
            UnmarshallingContext context) {
          reader.moveDown();
          String[] nameparts = reader.getValue().split(",");
          Addresses addresses = new Addresses(new ArrayList<Address>());
          reader.moveUp();
          return addresses;
    }

}

package com.xstream.demo1;

import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.StaxDriver;
import com.xstream.convert.XstreamConvert;
import com.xstream.vo1.Address;
import com.xstream.vo1.Addresses;

public class XstreamConvertDemo {
    public static void main(String[] args) {
        XstreamConvertDemo tester = new XstreamConvertDemo();
         XStream xstream = new XStream(new DomDriver());
         Addresses addresses = tester.getAddressDetails();        
         xstream.autodetectAnnotations(true);
         xstream.registerConverter(new XstreamConvert());
         //Object to XML Conversion
         String xml = xstream.toXML(addresses);
         System.out.println(xml);    
         
    }
     private static Addresses getAddressDetails(){
         List<Address> list = new ArrayList<Address>();
         Address address1 = new Address("t1", "p1");
         Address address2 = new Address("t2", "p2");
         list.add(address1);
         list.add(address2);
         Addresses addresses = new Addresses(list);        
         return addresses;
      }
}

输出:

<com.xstream.vo1.Addresses>
  <name>p1,t1</name>
</com.xstream.vo1.Addresses>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值