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

  • efaustus9

    efaustus9

    16 HAZİRAN 2006
  • Sergio Lafuente Rubio

    Sergio Lafue

    11 Aralık 2008
  • TheFlightsuit

    TheFlightsui

    22 HAZİRAN 2009