我试图反序列化一些泛型类型。它工作的很好,但我想把这个和平的代码换成一种方法。与Gson的泛型类型的Java反序列化
Type listType = new TypeToken<TestResult<MyObject>>(){}.getType();
TestResult<MyObject> result = new Gson().fromJson(json, listType);
如何做到这一点,证明有关类型的信息?谢谢!
kon
我试图反序列化一些泛型类型。它工作的很好,但我想把这个和平的代码换成一种方法。与Gson的泛型类型的Java反序列化
Type listType = new TypeToken<TestResult<MyObject>>(){}.getType();
TestResult<MyObject> result = new Gson().fromJson(json, listType);
如何做到这一点,证明有关类型的信息?谢谢!
kon
你不能。 泛型的类型无法在运行时确定。
一个简单的解决方法是将方法添加到MyObject
以返回生成的类型(如代码示例的第一行)。
是的,你可以。有一个解决方法。 你只需要将“Type”和类“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;
}
凡
而且方法调用会变成这个样子
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);
希望这有助于人。 如果它解决了您的问题,请不要忘记标记为答案;)
如果我只是想提供MyObject类型作为参数?基本上将下面的代码移动到一个方法中: 类型listType = new TypeToken>(){}。getType(); TestResult result = new Gson()。fromJson(json,listType); 这是行不通的? –
kon
我猜'listType'可以从'MyObject.getType()'确定,但不幸的是我不知道如何。 – CKuck
请看下面的答案 –