我需要知道是否可以执行以下操作。我需要通过 TCP 传递一些对象。我选择使用 Gson 将它们转换为 JSON。但这个对象可以有不同的类型。主要是我有:
public class NetMessage {
public int code;
public Object obj;
}
有代码
和一个可以有不同类类型的对象。在转换为初始类型后如何重建对象?
测试:
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);
}
最佳答案
基本上,按照你的设置,这是不可能的。
Gson 通过查看目标类型来执行反序列化。当该类型无关紧要时,它有一些默认值。对于Object
,该类型是LinkedTreeMap
。
给定
public class NetMessage {
public int code;
public Object obj;
}
和
return gsonizer.fromJson(obj, NetMessage.class);
您尚未指定如何反序列化 obj
字段。在这种情况下,Gson 将默认使用 LinkedTreeMap
。
唯一的解决方案是显式指定 obj
所需的类型。
关于java - 获取对象的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22748928/