2011-08-23 21 views
7

मैं जीएसओएन का उपयोग कर एंड्रॉइड में JSON क्रमबद्ध/deserialize करने की कोशिश कर रहा हूँ।कस्टम ऑब्जेक्ट्स के जीएसओएन Deserializing ऐरे

public class Session { 
@SerializedName("name") 
private String _name; 
@SerializedName("users") 
private ArrayList<User> _users = new ArrayList<User>(); 
} 

और:

public class User { 
@SerializedName("name") 
private String _name; 
@SerializedName("role") 
private int _role; 
} 

मैं serializing/डेटा deserializing के लिए GSON उपयोग कर रहा हूँ मैं दो वर्गों है कि इस तरह लग रहे है। मैं तो जैसे को क्रमानुसार:

Gson gson = new Gson(); 
String sessionJson = gson.toJson(session); 

यह JSON कि इस तरह दिखता है का उत्पादन करेगा:

{ 
"name":"hi", 
    "users": 
[{"name":"John","role":2}] 
} 

और मैं की तरह तो deserialize:

Gson gson = new Gson(); 
Session session = gson.fromJson(jsonString, Session.class); 

जब मैं कर मैं एक त्रुटि हो रही है यह कॉल

DEBUG/dalvikvm(739): wrong object type: Ljava/util/LinkedList; Ljava/util/ArrayList; 
WARN/System.err(739): java.lang.IllegalArgumentException: invalid value for field 

मुझे नहीं पता कि यह त्रुटि क्या है। मैं खुद को कुछ भी गलत गलत नहीं देख रहा हूं। कोई मदद? धन्यवाद!

+1

जब मैं सत्र वर्ग में उपयोगकर्ता सूची को एक सूची में एक सूची में बदलता हूं तो समस्या दूर हो जाती है। क्या इससे जीएसओएन के लिए समस्या हो सकती है? –

उत्तर

11

इस के लिए अपने कोड में परिवर्तित करें:

public class Session { 
    @SerializedName("name") 
    private String _name; 
    @SerializedName("users") 
    private List<User> _users = new ArrayList<User>(); 
    } 

यह एक अच्छा अभ्यास उपयोग इंटरफेस है, और GSON की आवश्यकता है कि (कम से कम, अतिरिक्त विन्यास के बिना)।

जीसन जावास्क्रिप्ट में सरणी "[]" को एक लिंक्डलिस्ट ऑब्जेक्ट में परिवर्तित करता है।

अपने कोड में, जीएसओएन _users फ़ील्ड में एक लिंक्डलिस्ट को इंजेक्ट करने का प्रयास करता है, उस क्षेत्र की तुलना में इसकी सूची।

संबंधित मुद्दे