我有以下代码段:
public class MyClass{
private Object returnValue;
//getters setters
}
Gson gson=...;
MyClass cl=new MyClass();
cl.setResultValue(***new OtherClass()***);
gson.toJson(cl,MyClass.class);
当我尝试反序列化时,我需要在returnValue字段中观察OtherClass实例,但我在那里得到LinkedHashMap。我理解这可能是因为Object字段类型,但是如何强制它获取实际类型的对象,而不仅仅是Object?
答案 0 :(得分:0)
您可以使用泛型实现它。
首先让您将类归类如下:
public class MyClass<T>{
private T returnValue;
public T getReturnValue(){
return returnValue;
}
public void setReturnValue(T returnValue){
this.returnValue = returnValue;
}
}
之后,您可以使用Type反序列化json:
public static void main(String[] args){
Gson gson = new Gson();
MyClass<OtherClass> myClass = new MyClass<>();
myClass.setReturnValue(new OtherClass());
//serialization
String json = gson.toJson(myClass);
Type type = new TypeToken<MyClass<OtherClass>>
MyClass<OtherClass> deserializedClass = gson.fromJson(json, type);
}
答案 1 :(得分:-1)
查看我已完成的下一个流程
public class SomeClass {
private int x;
private Object object;
public SomeClass(Object object) {
this.object = object;
}
}
public class AnotherClass {
private String test;
private int y;
public AnotherClass() {
test = "dsadas";
y = 5;
}
}
当我在做下一个时:
gson.toJson(new SomeClass(new AnotherClass()));
结果是:{“x”:0,“object”:{“test”:“dsadas”,“y”:5}}
正如你所看到的,这种方式很好用
编辑: 在反序列化的情况下,存在已知问题并处理这种情况。 gson不知道将json转换为什么的问题。所以你必须在gson中发送你想要解析它的类型并构建deserizaler。
更常见的是为这个其他类创建接口。所以你可以标记它。我们来说IOtherClass
现在,IOtherClass的其中一个字段将是TYPE。
您需要为IOtherClass构建deseriaze,然后您将根据类型进行转换。 这是告诉gson要解析什么的唯一方法
答案 2 :(得分:-1)
我没有找到任何优雅的解决方案,所以我决定处理内部LinkedHashMap并手动处理它。感谢