我正在尝试以不同方式序列化和反序列化不同类型的地图。我希望...
问题是,有时候将类型为 的映射传递给
我已经查看了Serialize/Deserialize Map<String, Object> with Jackson,但找不到解决方案。
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>> {
...
}
然后我将它们添加到我的模块
中,并指定类型:
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,但找不到解决方案。
public class MyInterfaceMap extends Map<String, MyInterface> { ... }
,然后根据您的类型创建您的(反)序列化器public class MyFirstSerializer extends JsonSerializer<MyInterfaceMap> { ... }
,可能会起作用。 - walen