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