2011-08-23 62 views
7

我想在Android中使用GSON序列化/反序列化JSON。我有一個看起來像這樣兩類:GSON反序列化自定義對象數組

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; 
} 

我使用GSON用於序列化/反序列化的數據。我序列像這樣:

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

這將產生JSON看起來像這樣:

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

我反序列化,像這樣:

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

當我將Session類中的用戶列表從ArrayList更改爲List時,問題似乎消失了。這是否會導致GSON出現問題? –

回答

11

你的代碼改成這樣:

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

這是一個很好的做法使用接口,以及GSON要求(至少,無需額外配置)。

Gson將javascript中的數組「[]」轉換爲LinkedList對象。

在你的代碼中,GSON試圖在_users字段中注入一個LinkedList,並認爲該字段是一個List。