用Gson实现泛型类型的Java反序列化
我正在尝试反序列化一些泛型类型。它工作得很好,但我想把这段代码换成一个方法用Gson实现泛型类型的Java反序列化,java,generics,deserialization,gson,Java,Generics,Deserialization,Gson,我正在尝试反序列化一些泛型类型。它工作得很好,但我想把这段代码换成一个方法 Type listType = new TypeToken<TestResult<MyObject>>(){}.getType(); TestResult<MyObject> result = new Gson().fromJson(json, listType); Type listType=new-TypeToken(){}.getType(); TestResult=new G
Type listType = new TypeToken<TestResult<MyObject>>(){}.getType();
TestResult<MyObject> result = new Gson().fromJson(json, listType);
Type listType=new-TypeToken(){}.getType();
TestResult=new Gson().fromJson(json,listType);
我如何做到这一点,证明有关类型的信息?您不能。
在运行时无法确定泛型的类型
一个简单的解决方法是向
MyObject
添加一个方法以返回结果类型(如代码示例的第一行)。可以。有一个变通办法。
您只需显式地将“MyObject”的类型和类传递给该方法
在您的例子中,开发一个具有以下签名和正文的方法
public <T> Object getGenericDataObjectFromJson(String json, Type t, Class<T> type) {
// Convert Json String to Java object
TestResult<T> obj = gson.fromJson(json, t);
return obj;
}
public对象getGenericDataObjectFromJson(字符串json,类型t,类类型){
//将Json字符串转换为Java对象
TestResult obj=gson.fromJson(json,t);
返回obj;
}
在哪里
GsonUtility gs = new GsonUtility();// Your gson utility class
JSONObject jsonObj = "your json string";
// Explicitly identifying the type so as to pass it to the method
// Because The type of a generics can't be determinted during runtime as #CKuk said
Type objectType = new TypeToken<DataObject<objectType>>(){}.getType();
TestResult<MyObject> resultObject= (TestResult<MyObject>) gs.getGenericDataObjectFromJson(jsonObj.toString(), objectType, MyObject.class);
GsonUtility gs=new GsonUtility();//您的gson实用程序类
JSONObject jsonObj=“您的json字符串”;
//显式标识类型以便将其传递给方法
//正如#CKuk所说,因为泛型的类型无法在运行时确定
Type objectType=new-TypeToken(){}.getType();
TestResult resultObject=(TestResult)gs.getGenericDataObjectFromJson(jsonObj.toString(),objectType,MyObject.class);
如果我只想提供MyObject类型作为参数?基本上将以下代码移动到一个方法中:Type listType=new TypeToken(){}.getType();TestResult=new Gson().fromJson(json,listType);这行得通吗?我想可以通过MyObject.getType()
来确定listType
,但遗憾的是我不知道如何确定。请看下面的答案