2011-08-23 59 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。