0

ソース コードで enum 定数の名前を変更しました。

から

public enum MyEnum { FOO, BAR }

public enum MyEnum { FOO, BAZ }

xstream で以前にシリアル化された古いデータを読み戻そうとすると、ConversionException: "No enum constant MyEnum BAR".

私はエイリアシングを試みました:

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

しかし、それは役に立ちませんでした。

この古い xstream シリアル化されたファイルを新しいコードで読み取る方法はありますか?

4

1 に答える 1

1

enum 定数に別名を付けることはできません。

コンバーターは数行でジョブを実行できます

public class 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;
}

}

于 2013-01-24T15:16:49.643 に答える