Saya ingin mentransfer objek daftar melalui Google Gson, tetapi saya tidak tahu cara membatalkan serialisasi 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 di Eclipse yang mengatakan "Tipe new List(){} harus mengimplementasikan metode abstrak yang diwarisi..." dan jika saya menggunakan perbaikan cepat saya mendapatkan lebih dari 20 rintisan metode.
Saya cukup yakin ada solusi yang lebih mudah, tetapi sepertinya saya tidak dapat menemukannya!
Sunting:
Sekarang saya punya
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 melakukan menangkap JsonParseExceptions dan "hasil" bukan nol.
Saya memeriksa listType dengan debugger dan mendapatkan yang berikut:
- list Type
- args = ListOfTypes
- list = null
- tipe terselesaikan = Tipe[ 1 ]
- pemuat = PathClassLoader
- ownerType0 = nol
- ownerTypeRes = nol
- rawType = Kelas (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
jadi sepertinya pemanggilan "getClass" tidak berfungsi dengan baik. Ada saran...?
Sunting2: Saya sudah memeriksa Gson Panduan Pengguna. Itu menyebutkan Pengecualian Runtime yang harus terjadi selama penguraian 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 yang disarankan dalam panduan pengguna. Tapi tidak membantu.
Sunting3: Terpecahkan, lihat jawaban saya di bawah.
TokenType
. Sudahkah Anda mencoba cara itu? - person Nishant   schedule 05.04.2011