java Enum序列化问题

来源:互联网 发布:政府oa java 编辑:程序博客网 时间:2024/06/10 06:24

背景:项目中,服务器端使用JAVA开发,客户端用C#开发,客户端和服务器端通过WEBSERVICE连接,但在使用Enum(枚举)时,服务器端正确接收到信息,在信息序列化到文件时,Enum的值总是不能正确的序列化。后经多方参考,才知道要指定类型:

XMLEncoder encoder;
  try {
   encoder = new XMLEncoder(
           new BufferedOutputStream(
               new FileOutputStream(Config.instance().getModuleFile(filename))));

  

   //此处代码可以让Enum顺利的序列化,反序列化的时候不存在这个问题
   encoder.setPersistenceDelegate( DBTYPE.class, new EnumPersistenceDelegate() );
   encoder.setPersistenceDelegate( WEBCTRL.class, new EnumPersistenceDelegate() );
   encoder.setPersistenceDelegate( METHOD.class, new EnumPersistenceDelegate() );


   encoder.writeObject(webnode);
   encoder.close();
   return true;
  } catch (Exception e) {
   e.printStackTrace();
  }

 

//EnumPersistenceDelegate.java

public class EnumPersistenceDelegate extends PersistenceDelegate {
 protected boolean mutatesTo(Object oldInstance, Object newInstance) {
  return oldInstance == newInstance;
 }

 protected Expression instantiate(Object oldInstance, Encoder out) {
  Enum e = (Enum) oldInstance;
  return new Expression(e, e.getClass(), "valueOf", new Object[] { e
    .name() });
 }
}