2013-03-20 90 views
0

我使用JSON中與這樣的消息來響應REST服務:使用GSON deserilization任意類型

{ 
    "statusMessage":{ 
     "message":"my message", 
     "error":false 
    }, 
    "data":null 
} 

領域data是數組,有時爲空,有時與一個類的實例填補(如合夥人,Department,Building,...只有一種類型)。

在我的Java應用程序,我有一個ServerResponse類,它看起來像:

public class ServerResponse { 

    private StatusMessage statusMessage; 
    private List<Object> data; 

    public ServerResponse(StatusMessage statusMessage, List<Object> data) { 
     this.statusMessage = statusMessage; 
     this.data = data; 
    } 
    ... 
} 

data爲null,是沒有問題的,但是當它與一些對象罷了,我不知道如何將其反序列化。如果我使用:

response = gson.fromJson(result, ServerResponse.class);

我不能投或使用data對象的列表。此外,如果我在Java中聲明字段數據是這樣的:

private List<Department> data; 

它正常工作與Department類型,但是,可以預料,將引發與其他類型的錯誤。我被卡住了......

+0

如果返回的JSON是壞,你幾乎出於運氣當涉及到將其反序列化爲Java類/對象時。至少不是沒有胡扯的廢話,並從'Object'投射。您最好簡單地解析JSON並提取數據。 – 2013-03-21 02:07:17

回答

0

如果您沒有指定data的類型,即您現在使用List<Object>,那麼您將獲得一張地圖列表(並且地圖可以再次包含取決於內容的列表或地圖)。

如果您可以通過內容區分對象的類型,你可以寫一個簡單的自定義解串器就像問here(檢查isA場)