在我的项目中,我遇到了JSON序列化的问题。我举了一个简单的例子来说明它:
我创建了一个包含hashMap的对象Session。
public class session {
private Map<String, Object> mapKeyValue = new HashMap<>();
public Map<String, Object> getMapKeyValue() {
return mapKeyValue;
}
public void setMapKeyValue(Map<String, Object> mapKeyValue) {
this.mapKeyValue = mapKeyValue;
}
}
此地图可以包含各种对象。我只知道运行时这些对象的类型。示例:
public class Dog {
private final String race;
private final String name;
public Dog(String race, String name) {
this.name = name;
this.race = race;
}
public String getName() {
return name;
}
public String getRace() {
return race;
}
}
或
public class Insect {
private final int nbPates;
private final String name;
public Insect(int nbPates, String name) {
this.nbPates = nbPates;
this.name = name;
}
public int getNbPates() {
return nbPates;
}
public String getName() {
return name;
}
}
我想将对象会话保存到数据库,以便以后能够恢复。
我的第一个想法是在json中序列化我的会话对象,然后保存到数据库。
public static void main(String[] args) {
final session session = new session();
session.add("Dog", new Dog("labrador", "milou"));
session.add("Insect", new Insect(4, "cafar"));
String output = serializeJSON(session);
final session session2 = (session) deserializeJSON(output, session.class);
Dog dog = (Dog)session2.get("Dog");
}
效果很好。当我反序列化它时,没有错误,但结果是反序列化的Session中包含的映射不包含原始类型的对象,但包含hashMap $ Node对象。
我想反序列化无法猜测字符串中对象的类型。
是否有workAround或任何其他策略将我的会话保存到数据库并能够像之前一样恢复它?