3
我想序列化和反序列化不同类型的地图。我想序列化/反序列化与杰克逊不同类型的地图
Map<String, MyInterface> map1;
被序列化和反序列化不同于
Map<String, String> map2;
我已经创建了两个串行
public class MyFirstSerializer extends JsonSerializer<Map<String, Property>> {
...
}
和
public class MySecondSerializer extends JsonSerializer<Map<String, String>> {
...
}
和两个解串器
public class MyFirstDeserializer extends JsonDeserializer<Map<String, Property>> {
...
}
和
public class MySecondDeserializer extends JsonDeserializer<Map<String, String>> {
...
}
我然后将它们添加到我的Module
并指定类型:
SimpleModule module = new SimpleModule("MyModule", new Version(1, 0, 0, "beta"));
module.addSerializer(new MyFirstSerializer());
module.addDeserializer((Class<Map<String, Property>>) (Class<?>) Map.class, new MyFirstDeserializer());
module.addSerializer(new MySecondSerializer());
module.addDeserializer((Class<Map<String, String>>) (Class<?>) Map.class, new MySecondDeserializer());
的问题是,这种类型的地图有时传递给MyFirstSerializer
或地图类型有时传递给MySecondSerializer
。
我认为问题是地图的类型在运行时被擦除,并且没有办法区分这两个不同的地图。我如何解决这个问题?我看过Serialize/Deserialize Map<String, Object> with Jackson但找不到解决方案。
也许定义,使他们没有得到消除,你自己喜欢的类型'公共类MyInterfaceMap扩展地图<字符串,MyInterface的> {... }'然后根据你的类型创建你的(de)序列化器public class MyFirstSerializer extends JsonSerializer {...}',可能会工作。 –
walen
@walen这是我也到达的解决方案。如果没有其他解决方案,我会最终做到这一点,所以随时添加一个答案 – Ian2thedv