मैं Google Gson के माध्यम से एक सूची ऑब्जेक्ट को स्थानांतरित करना चाहता हूं, लेकिन मुझे नहीं पता कि जेनेरिक प्रकारों को कैसे निष्क्रिय करना है।
मैं किसकी तलाश के बाद की कोशिश की इस (BalusC का जवाब):
MyClass mc = new Gson().fromJson(result, new List<MyClass>(){}.getClass());
लेकिन तब मुझे यह कहते हुए ग्रहण में एक त्रुटि मिलती है "टाइप नई सूची () {} को विरासत में मिली अमूर्त पद्धति को लागू करना चाहिए ..." और अगर मैं एक त्वरित फिक्स का उपयोग करता हूं तो मुझे 20 से अधिक विधि स्टब्स का एक राक्षस मिलता है।
मुझे पूरा यकीन है कि एक आसान उपाय है, लेकिन मैं इसे खोजने में असमर्थ हूं!
संपादित करें:
अब मेरे पास है
Type listType = new TypeToken<List<MyClass>>()
{
}.getType();
MyClass mc = new Gson().fromJson(result, listType);
हालाँकि, मुझे "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)
मैं कर पकड़ JsonParseExceptions और "परिणाम" नल नहीं है।
मैंने डीबगर के साथ सूची टाइप की जाँच की और निम्नलिखित मिला:
- सूची प्रकार
- args = ListOfTypes
- सूची = अशक्त
- हल किया गया = टाइप [1]
- लोडर = PathClassLoader
- ownerType0 = null
- ownerTypeRes = null
- rawType = क्लास (java.util.ArrayList)
- rawTypeName = "java.util.ArrayList"
- args = ListOfTypes
तो ऐसा लगता है कि "getClass" मंगलाचरण ठीक से काम नहीं किया। कोई सुझाव...?
Edit2: मैं Gson उपयोगकर्ता गाइड पर जाँच कर रहा हूँ । इसमें एक रनटाइम अपवाद का उल्लेख किया गया है जो जेनसन को एक सामान्य प्रकार को पार्स करने के दौरान होना चाहिए। मैंने इसे "गलत" किया (ऊपर नहीं दिखाया गया), उदाहरण के रूप में, लेकिन उस अपवाद को बिल्कुल नहीं मिला। इसलिए मैंने सुझाए गए उपयोगकर्ता गाइड के अनुसार क्रमिकता को बदल दिया। हालांकि मदद नहीं की।
Edit3: हल, मेरा जवाब नीचे देखें।
TokenType
। क्या आपने इस तरह से कोशिश की है?