Google Gson - serisini listesi<sınıf> nesne? (genel tür)
Listesi Google Gson ile nesne aktarmak istiyorum, ama genel türler serisini nasıl bilmiyorum.
I this (BalusC cevap) baktıktan sonra ne çalıştı:
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
ama sonra ben bir hata tutulma söyleyerek, "yeni Liste(){} uygulamak gerekir devralınan soyut yöntem..." ve eğer kullandığım bir hızlı bir düzeltme olsun bir canavar üzerinde 20 yöntem taslakları.
Daha kolay bir çözüm olduğundan oldukça eminim, ama bulamıyor gibiyim!
Şimdiden teşekkürler, denizanası
Düzenleme:
Ben şimdi var
Type listType = new TypeToken<List<MyClass>>()
{
}.getType();
MyClass mc = new Gson().fromJson(result, listType);
Ancak, aşağıdaki özel durum de alabilirim "fromJson" satır:
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)
Benyapın"sonuç" boş değil. yakalamak JsonParseExceptions ve
Hata ayıklayıcı ile listType kontrol ettim ve şu var:
- liste Türü
- = ListOfTypes besten
- liste = null
- resolvedTypes = Tip[ 1 ]
- loader = PathClassLoader
- ownerType0 = null
- ownerTypeRes = null
- rawType = Sınıf (java.açıklama.ArrayList)
- rawTypeName = "java.açıklama.". ArrayList
- = ListOfTypes besten
"çağırma düzgün olmadı. "getClass görünüyor yani Herhangi bir öneri...?
Edit2: Gson User Guide kontrol gidiyorum. Json için genel bir tür ayrıştırma sırasında gerçekleşmesi gereken bir çalışma Zamanı özel Durum bahseder. "" (Yukarıda gösterilen), yalnızca örnek olarak, ama bu durum hiç olmadı. yanlış yaptım Kullanıcı olarak serileştirme değiştirdim rehberi önerdi. Yardım, ama olmadı.
Edit3: Çözüldü, aşağıda benim cevaba bakınız.
CEVAP
Yöntem genel koleksiyon serisi için:
Type listType = new TypeToken<ArrayList<YourClass>>() {
}.getType();
List<YourClass> yourClassList = new Gson().fromJson(jsonArray, listType);
İthalat : import java.lang.reflect.Type;
Arayüz vs Soyut Sınıf (genel OO)...
C serisini JSON içine# dinamik nesne?...
Scala nesne ve sınıf arasındaki fark...
Python sınıf devralır nesne...
Anonim sınıf genel liste...