SORU
5 NİSAN 2011, Salı


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

"ç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
5 NİSAN 2011, Salı


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;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FPSRussia

    FPSRussia

    19 NİSAN 2010
  • AutoStream's Garage419

    AutoStream's

    15 EKİM 2007
  • MrOctopi

    MrOctopi

    6 Aralık 2010