2014-01-11 47 views
0

Java對象(包括Object類)讓我們假設收到以下JSON數據:轉換JSON數據使用GSON

{ 
    "request" : "connection_status", 
    "data" : { "id" : "foo", "username" : "bar" } 
} 

,並要反序列化到Java對象的類的定義是這樣的:

public class SingleJsonObjectRequest { 
    private String request; 
    private Object data; 

    public String getRequest() { 
     return request; 
    } 

    public void setRequest(String request) { 
     this.request = request; 
    } 

    public Object getData() { 
     return data; 
    } 

    public void setData(Object data) { 
     this.data = data; 
    } 
} 

顯然,你甚至有下面的類:

public class UserInfo { 
    private String id; 
    private String username; 

    public String getId() { 
     return id; 
    } 

    public UserInfo setId(String id) { 
     this.id = id; 
     return this; 
    } 

    public String getUsername() { 
     return username; 
    } 

    public UserInfo setUsername(String username) { 
     this.username = username; 
     return this; 
    } 
} 

可以納入仙gleJsonObjectRequest通過調用:

singleObjReq.setData(new UserInfo()); 

有什麼辦法將該JSON數據轉換爲SingleJsonObjectRequest對象嗎?我的意思是,你不能使用下面的代碼:

SingleJsonObjectRequest singleObjReq = gson.fromJson(jsonReq, SingleJsonObjectRequest.class); 

因爲SingleJsonObjectRequest具有一般的數據對象,而不是一個的UserInfo對象。

回答

1

你可以編寫一個自定義的解串器(https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Deserializer)。

恕我直言,你必須爲每個你想要發送/接收的數據類型使用單獨的類。您可以創建一個通用的基類,像這樣

class JsonRequest<T>{ 
    private String request; 
    private T data; 

    public String getRequest() { 
     return request; 
    } 

    public void setRequest(String request) { 
     this.request = request; 
    } 

    public T getData() { 
     return data; 
    } 

    public void setData(T data) { 
     this.data = data; 
    } 
} 

,並使用子類爲每種類型的,因爲Java亙古不變的店一般類型的信息 例如

class UserInfoRequest extends JsonRequest<UserInfo>{ 
//nothing in here 
} 
+0

非常感謝你,很好的解釋!它按預期工作。 –