如何使用XStream处理枚举常量重命名?

时间:2013-01-24 11:29:02

标签: java enums xstream

我在源代码中重命名了一个枚举常量。

来自

public enum MyEnum { FOO, BAR }

public enum MyEnum { FOO, BAZ }

现在,如果我尝试回读之前使用xstream序列化的旧数据,我会得到一个ConversionException: "No enum constant MyEnum BAR"

我尝试了别名:

xstream.aliasField("BAR", MyEnum.class, "BAZ");

但这没有帮助。

知道如何用新代码读取这个旧的xstream序列化文件吗?

1 个答案:

答案 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;
}

}