我有以下代码片段:

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?

最佳答案

您可以使用泛型来实现。
首先,让您将类通用化,如下所示:

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);
}

10-06 12:39
查看更多