Bir liste nesnesini Google Gson aracılığıyla aktarmak istiyorum, ancak genel türlerin serileştirmesini nasıl yapacağımı bilmiyorum.
Ben baktıktan sonra çalıştı Ne bu (BalusC cevabı):
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
ama sonra "Yeni Liste () {} miras alınan soyut yöntemi uygulamak gerekir ..." diyen bir hata alıyorum ve hızlı bir düzeltme kullanırsanız 20'den fazla yöntem saplamaları bir canavar olsun.
Daha kolay bir çözüm olduğundan eminim ama bulamıyorum!
Düzenle:
Şimdi sahibim
Type listType = new TypeToken<List<MyClass>>()
{
}.getType();
MyClass mc = new Gson().fromJson(result, listType);
Ancak, "fromJson" satırında aşağıdaki özel durumu olsun:
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)
Ben bunu yakalamak JsonParseExceptions ve "sonuç" boş değil.
ListType'ı hata ayıklayıcı ile kontrol ettim ve aşağıdakileri aldım:
- liste Türü
- args = ListOfTypes
- list = boş
- resolvedTypes = Tür [1]
- loader = PathClassLoader
- ownerType0 = null
- ownerTypeRes = boş
- rawType = Sınıf (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
bu nedenle "getClass" çağrısının düzgün çalışmadığı anlaşılıyor. Herhangi bir öneri...?
Edit2: Gson Kullanım Kılavuzu'nda kontrol ettim . Json'a genel bir tür ayrıştırılırken olması gereken bir Çalışma Zamanı Özel Durumundan bahseder. Örnekte olduğu gibi "yanlış" yaptım (yukarıda gösterilmiyor), ancak bu istisnayı anlamadım. Bu yüzden serileştirmeyi önerilen kullanıcı kılavuzunda olduğu gibi değiştirdim. Yine de yardımcı olmadı.
Edit3: Çözüldü, aşağıdaki cevabımı gör.
TokenType
. Bu şekilde denedin mi?