我試圖反序列化一些泛型類型。它工作的很好,但我想把這個和平的代碼換成一種方法。與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
請看下面的答案 –