Saya ingin mentransfer objek daftar melalui Google Gson, tetapi saya tidak tahu bagaimana cara deserialisasi tipe generik.
Apa yang saya coba setelah melihat ini (jawaban BalusC):
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
tapi kemudian saya mendapatkan kesalahan dalam gerhana mengatakan "Jenis Daftar baru () {} harus menerapkan metode abstrak yang diwarisi ..." dan jika saya menggunakan perbaikan cepat saya mendapatkan monster lebih dari 20 metode bertopik.
Saya cukup yakin bahwa ada solusi yang lebih mudah, tetapi sepertinya saya tidak dapat menemukannya!
Edit:
Sekarang sudah
Type listType = new TypeToken<List<MyClass>>()
{
}.getType();
MyClass mc = new Gson().fromJson(result, listType);
Namun, saya mendapatkan pengecualian berikut di baris "fromJson":
java.lang.NullPointerException
at org.apache.harmony.luni.lang.reflect.ListOfTypes.length(ListOfTypes.java:47)
at org.apache.harmony.luni.lang.reflect.ImplForType.toString(ImplForType.java:83)
at java.lang.StringBuilder.append(StringBuilder.java:203)
at com.google.gson.JsonDeserializerExceptionWrapper.deserialize(JsonDeserializerExceptionWrapper.java:56)
at com.google.gson.JsonDeserializationVisitor.invokeCustomDeserializer(JsonDeserializationVisitor.java:88)
at com.google.gson.JsonDeserializationVisitor.visitUsingCustomHandler(JsonDeserializationVisitor.java:76)
at com.google.gson.ObjectNavigator.accept(ObjectNavigator.java:106)
at com.google.gson.JsonDeserializationContextDefault.fromJsonArray(JsonDeserializationContextDefault.java:64)
at com.google.gson.JsonDeserializationContextDefault.deserialize(JsonDeserializationContextDefault.java:49)
at com.google.gson.Gson.fromJson(Gson.java:568)
at com.google.gson.Gson.fromJson(Gson.java:515)
at com.google.gson.Gson.fromJson(Gson.java:484)
at com.google.gson.Gson.fromJson(Gson.java:434)
Saya lakukan JsonParseExceptions menangkap dan "hasil" tidak null.
Saya memeriksa listType dengan debugger dan mendapatkan yang berikut:
- Jenis daftar
- args = ListOfTypes
- daftar = nol
- resolvedTypes = Jenis [1]
- loader = PathClassLoader
- ownerType0 = null
- ownerTypeRes = null
- rawType = Kelas (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
jadi sepertinya doa "getClass" tidak berfungsi dengan baik. Ada saran ...?
Sunting2: Saya sudah memeriksa pada Panduan Pengguna Gson . Itu menyebutkan Pengecualian Runtime yang harus terjadi selama parsing tipe generik ke Json. Saya melakukannya "salah" (tidak ditampilkan di atas), seperti pada contoh, tetapi tidak mendapatkan pengecualian sama sekali. Jadi saya mengubah serialisasi seperti dalam panduan pengguna yang disarankan. Tapi itu tidak membantu.
Sunting3: Dipecahkan, lihat jawaban saya di bawah ini.
TokenType
. Sudahkah Anda mencobanya?