获取对象的类

时间:2014-03-30 19:47:01

标签: java json gson

我需要知道是否可以执行以下操作。我需要通过tcp传递一些对象。我选择使用Gson将它们转换为JSON。但是这个对象可以有不同的类型。主要是我:

public class NetMessage {
    public int code;
    public Object obj;
}

code和一个对象,它可以有不同的类类型。如何在转移到初始类型后重建我的对象?

测试:

public static void main(String[] args) {
    Gsonizer gs = new Gsonizer();
    Invoice v = new Invoice(123, 123, 10.1);
    NetMessage nm = new NetMessage(2, v);
    String s = (String) gs.toNet(nm);
    NetMessage nm2 = (NetMessage) gs.fromNet(s);

    System.out.println("> " +nm2.code);
    System.out.println("> " +(Object)nm2.obj.getClass()); <<<<<<<< *

}

我的*标记了一个完全不同的类型,它是来自Gson lib的内部类,它打印出来: 班com.google.gson.internal.LinkedTreeMap

我怎样才能实现我重建对象的初始类型。

编辑: Gson反序列化代码:

public Object fromNet(String obj){
        return  gsonizer.fromJson(obj, NetMessage.class);
    }

1 个答案:

答案 0 :(得分:1)

基本上,使用您的设置,这是不可能的。

Gson通过查看目标类型来执行反序列化。当该类型无关紧要时,它有一些默认值。对于Object,该类型为LinkedTreeMap

鉴于

public class NetMessage {
    public int code;
    public Object obj;
}

return  gsonizer.fromJson(obj, NetMessage.class);

您尚未指定如何对obj字段进行反序列化。在这种情况下,Gson默认使用LinkedTreeMap

唯一的解决方案是明确指定obj所需的类型。