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