背景:项目中,服务器端使用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() }); } } |
···
···