Я пытаюсь сериализовать и десериализовать различные типы карт по-разному. Я хочуСериализовать/Deserialize карты с различными типами с 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>> {
...
}
и два deserializers
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 расширяет Map {... } ', а затем создание сериализаторов (de) на основе ваших типов' public class MyFirstSerializer расширяет JsonSerializer {...} ', может работать. –
walen
@walen это решение, к которому я тоже пришел. Если нет других решений, я закончу это, поэтому не стесняйтесь добавлять ответ – Ian2thedv