zoukankan      html  css  js  c++  java
  • Xstream序列化实体

    Java序列化的日期为是很标准,XStream中转换为标准的做法

    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.GregorianCalendar;
    import java.util.Locale;

    import com.thoughtworks.xstream.converters.ConversionException;
    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;

    public class DateConverter implements Converter {
     private Locale locale;

     public DateConverter(Locale locale) {
      super();
      this.locale = locale;
     }

     @Override
     public void marshal(Object value, HierarchicalStreamWriter writer,
       MarshallingContext context) {
      Date date = (Date) value;
      DateFormat formatter = new SimpleDateFormat(
        "yyyy-MM-dd'T'HH:mm:ss.SSS");
      // DateFormat formatter = DateFormat.getDateInstance(DateFormat.FULL,
      // this.locale);
      // 在这写输出的格式
      writer.setValue(formatter.format(date));
     }

     @Override
     public Object unmarshal(HierarchicalStreamReader reader,
       UnmarshallingContext context) {
      GregorianCalendar calendar = new GregorianCalendar();
      DateFormat formatter = DateFormat.getDateInstance(DateFormat.FULL,
        this.locale);
      try {
       calendar.setTime(formatter.parse(reader.getValue()));
      } catch (ParseException e) {
       throw new ConversionException(e.getMessage(), e);
      }
      return calendar;
     }

     @Override
     public boolean canConvert(Class clazz) {
      // return Calendar.class.isAssignableFrom(clazz);
      return Date.class.isAssignableFrom(clazz);
     }

    }

    去掉Java的包名等

    package com.anson.ws;

    //import java.io.ByteArrayOutputStream;

    import java.io.ByteArrayOutputStream;
    import java.util.Locale;

    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;

    /**
     * @author jeo 08/12/29
     */
    public class MQObjectToXMLUtil {

     private static XStream sxstream;
     static {
      sxstream = new XStream(new DomDriver());

      // 把MQ所用到的类的完全限定名,改为类名
      sxstream.alias("Person", Person.class);
      sxstream.alias("Book", Book.class);
      
      //加入日期转换器
      DateConverter converter = new DateConverter(Locale.CHINESE);
      sxstream.registerConverter(converter);
     }

     /**
      * 把java的可序列化的对象转换为XML格式的字符串
      *
      * @param obj
      *            要序列化的可序列化的对象
      */
     public static String objectXmlEncoder(Object obj) {
      ByteArrayOutputStream bout = new ByteArrayOutputStream();

      // XMLEncoder encoder = new XMLEncoder(bout);
      String xml = null;
      try {
       // 对象序列化输出到字节流
       // encoder.writeObject(obj);
       // encoder.flush();
       // 关闭序列化工具
       // encoder.close();
       // 由字节流中取得XML格式字符串

       sxstream.toXML(obj, bout);
       xml = new String(bout.toByteArray(), "utf-8");
       // 关闭字节流
       // bout.close();
      } catch (Exception e) {
       e.printStackTrace();
      }
      return xml;
     }
    }

  • 相关阅读:
    FCKEditor配置
    在线文档编辑器原理
    DVD格式(vob)文件转换avi,转换后可嵌入HTML中播放
    Javascript小技巧
    sql server 查询当前记录的前一条和后一条记录
    [翻译]开发一个自己的HTML在线编辑器(二)
    在线编辑器(4)TAB键缩进功能
    IIS不能浏览ASP页面
    C#枚举类型的使用《转》
    C#中泛型使用《转》
  • 原文地址:https://www.cnblogs.com/Yjianyong/p/2375042.html
Copyright © 2011-2022 走看看