我试图通过Boon (一个简单的Map <Resistance, Double> map = new HashMap() )序列化和反序列化,其中Resistance是一个只有两个枚举实现的接口。
public interface Resistance {}
public enum Condition implements Resistance{
BURN, SLEEP, PARALYZED, CONFUSE;
}
public enum Element implements Resistance{
FIRE, ICE, EARTH, AIR;
}在添加了一些值之后,序列化似乎运行良好:
map.put(Element.FIRE, 1.1);
map.put(Condition.BURN, 0.2);
System.out.println("Fire resistance: " + map.get(Element.FIRE));
System.out.println("Burn resistance: " + map.map.get(Condition.BUR));
ObjectMapper mapper = JsonFactory.create();
String dst = mapper.toJson(manager);
System.out.println(dst);输出:
Fire resistance: 1.1
Burn resistance: 0.2
{"map":{"FIRE":1.1,"BURNED":0.2}}这个问题发生在反序列化过程中,解析器无法将枚举数与其类关联。所以我得到了:
map = mapper.readValue(dst, map.getClass()) ;
System.out.println("Fire resistance: " + manager.get(Element.FIRE));
System.out.println("Burn resistance: " + manager.get(Condition.BURN));输出:
Fire resistance: null
Burn resistance: null
{"map":{"":0.2}}我怎么才能解决这个问题?
发布于 2017-09-27 09:51:48
我正在编辑我的答案:
// map.getClass()返回类的实际实现时出错
Map map2 = mapper.readValue(dst, map.getClass()) ;
//返回正确地图
Map map2 = mapper.readValue(dst,Map.class) ;
还将打印的代码更改为:
System.out.println("Fire resistance: " + manager.get(Element.FIRE.toString()));
System.out.println("Burn resistance: " + manager.get(Condition.BURN.toString()));https://stackoverflow.com/questions/46444506
复制相似问题