我目前正在开发一个应用程序,其中我需要序列化 HashMap<Object1, Object2>
转换为json,然后从json反序列化到同一个“hashmap”。
我能够序列化它使用通常的Map器和覆盖 toString()
方法 Object1
.
public String toString(){
String res = Object1.elem1 + ";" + Object1.elem2;
return res
}
然后我就可以序列化并获得预期的json(res是我之前定义的字符串,不必全部写回去)*
{res : Object2JsonRepresentation}
然后我想反序列化,所以我使用一个自定义的keydeserializer:
@XmlElement(name="myMap")
@JsonDeserialize(keyUsing = Object1KeyDeserializer.class)
public HashMap <Object1,Object2> myMap = new HashMap <>();
以及 Object1KeyDeserializer
:
public class Object1KeyDeserializer extends KeyDeserializer{
@Override
public Object1 deserializeKey(String key, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String[] parts = key.split(";");
System.out.println(key);
Elem elem1 = new Elem(parts[1]);
Elem elem2 = new Elem(parts[2]);
Object1 obj = new Object1(elem1,elem2);
return obj;
}
}
尽管如此 keyDeserializer
好像从来没人打过电话,你能解释一下原因吗。我对json还很陌生,如果能给出详细的答案,我会很高兴的。
1条答案
按热度按时间js81xvg61#
您可以创建自己的序列化格式,而不是使用tostring()。如果Map中有非原语键,则可以将Map序列化为
在这种情况下,序列化程序和反序列化程序将如下所示:
以及
因此,可以使用字段和另一个Map创建类(用于检查不同类型的Map是否正常工作):
序列化值可以如下所示: