反序列化JSON未知类型

时间:2017-04-24 13:01:00

标签: java json serialization

在我的项目中,我遇到了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或任何其他策略将我的会话保存到数据库并能够像之前一样恢复它?

0 个答案:

没有答案