2011-08-23 50 views
7

Tôi đang cố gắng tuần tự hóa/deserialize JSON trong Android bằng cách sử dụng GSON. Tôi có hai lớp trông như thế này:GSON Deserializing Array của các đối tượng tùy chỉnh

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

và:

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

Tôi đang sử dụng GSON cho serializing/deserializing dữ liệu. Tôi serialize như vậy:

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

này sẽ tạo ra JSON trông như thế này:

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

Và tôi deserialize như vậy:

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

Tôi nhận được một lỗi khi tôi thực hiện cuộc gọi này.

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

Tôi không biết ý nghĩa của lỗi này. Tôi không thấy mình làm bất cứ điều gì nghiêm trọng. Bất kỳ giúp đỡ? Cảm ơn!

+1

Sự cố có vẻ biến mất khi tôi thay đổi danh sách người dùng trong lớp Phiên từ một ArrayList thành Danh sách. Điều này có gây ra vấn đề cho GSON không? –

Trả lời

11

Thay đổi mã của bạn như thế này:

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

Đó là một tốt giao diện thực tế sử dụng, và GSON yêu cầu (ít nhất, mà không cần cấu hình thêm).

Gson chuyển đổi mảng "[]" trong javascript thành đối tượng LinkedList.

Trong mã của bạn, GSON cố gắng đưa một LinkedList vào trường _users, suy nghĩ hơn trường đó là một Danh sách.

Các vấn đề liên quan