मुझे वही समस्या थी। एक अलग संदर्भ में एक और अधिक स्पष्ट जवाब देने के लिए:
मैं विधि जो त्रुटि "com.google.gson.internal.LinkedTreeMap MyType में ढाला नहीं जा सकता है" का उत्पादन निम्नलिखित था:
/**
* Reads a LinkedHashMap from the specified parcel.
*
* @param <TKey>
* The type of the key.
* @param <TValue>
* The type of the value.
* @param in
* The in parcel.
* @return Returns an instance of linked hash map or null.
*/
public static <TKey, TValue> LinkedHashMap<TKey, TValue> readLinkedHashMap(Parcel in) {
Gson gson = JsonHelper.getGsonInstance();
String content = in.readString();
LinkedHashMap<TKey, TValue> result = gson.fromJson(content, new TypeToken<LinkedHashMap<TKey, TValue>>(){}.getType());
return result;
}
मैं चाहता था लिंक हैशप पढ़ने/लिखने का एक आसान सामान्य तरीका। उपर्युक्त समाधान काम नहीं करता है क्योंकि टीके के साथ टाइपोकोकन की प्रकार की जानकारी संकलन के बाद खोलेगी, जहां तक मैं समझता हूं। और यह समस्या है। यदि आप बदलते हैं तो आप उदाहरण के लिए कोड हैं, तो यह काम करता है, क्योंकि अब हम स्पष्ट रूप से प्रकार टोकन को परिभाषित करते हैं। मैं जावा में इतना नहीं हूं कि मैं समझता हूं कि इस मामले में रनटाइम पर प्रकार की जानकारी को पढ़ना संभव क्यों है।
/**
* Reads a LinkedHashMap from the specified parcel.
*
* @param <TKey>
* The type of the key.
* @param <TValue>
* The type of the value.
* @param in
* The in parcel.
* @return Returns an instance of linked hash map or null.
*/
public static <TKey, TValue> LinkedHashMap<TKey, TValue> readLinkedHashMap(Parcel in, TypeToken<LinkedHashMap<TKey, TValue>> typeToken) {
Gson gson = JsonHelper.getGsonInstance();
Type type = typeToken.getType();
String content = in.readString();
LinkedHashMap<TKey, TValue> result = gson.fromJson(content, type);
return result;
}
और अब आप की तरह ऊपर समारोह कहेंगे:
readLinkedHashMap(in, new TypeToken<LinkedHashMap<UUID, MyObject>>(){});
एक sidenote 1: जब से जुड़ा हुआ हैश नक्शा writign, आप बिल्कुल किसी भी प्रकार टोकन निर्दिष्ट करने की आवश्यकता नहीं है। toJson (मानचित्र) पर्याप्त है।
एक sidenote 2 (एक समस्या जो मेरे पास थी): डिफ़ॉल्ट जीएसएन कुंजी को क्रमबद्ध करने के लिए toString() का उपयोग करता है। यदि आप कुंजी प्रकार के लिए एक प्रकार एडाप्टर पंजीकृत करते हैं जो शायद अधिक जटिल प्रकार है, तो इस प्रकार एडाप्टर को क्रमबद्ध करते समय लागू नहीं किया जाता है, लेकिन जब deserializing। यह एक गैर संगत और इसलिए असफल प्रक्रिया की ओर जाता है। निम्नलिखित विकल्प complex map key serialization सक्रिय करता है।
gsonBuilder.enableComplexMapKeySerialization()
आप जीसन 2.1 का उपयोग कर रहे हैं? –