我在源代码中重命名了一个枚举常量。
来自
public enum MyEnum { FOO, BAR }
要
public enum MyEnum { FOO, BAZ }
现在,如果我尝试回读之前使用xstream序列化的旧数据,我会得到一个ConversionException: "No enum constant MyEnum BAR"
。
我尝试了别名:
xstream.aliasField("BAR", MyEnum.class, "BAZ");
但这没有帮助。
知道如何用新代码读取这个旧的xstream序列化文件吗?
答案 0 :(得分:0)
无法为枚举常量设置别名。
转换器可以用几行完成工作
公共类MyEnumConverter实现Converter {
...
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
context.convertAnother(source, reflectionConverter);
}
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
String s = reader.getValue();
if (s.equals("BAR")) {
return MyEnum.BAZ;
} else {
return MyEnum.valueOf(s);
}
}
public boolean canConvert(Class type) {
return type == MyEnum.class;
}
}