GSON反序列化自定义对象数组
问题描述:
我想在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
我不知道这个错误的含义。我没有看到自己在做任何严重错误的事情。任何帮助?谢谢!
答
你的代码改成这样:
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。
当我将Session类中的用户列表从ArrayList更改为List时,问题似乎消失了。这是否会导致GSON出现问题? –