使用任意类型的Gson deserilization

时间:2013-03-20 11:35:17

标签: json list casting gson

我使用REST服务在json中响应这样的消息:

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

字段data是一个数组,有时为null,有时会填充一个类的实例(如Partner,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类型,但正如可能预期的那样,会抛出其他类型的错误。我被卡住了......

1 个答案:

答案 0 :(得分:0)

如果您没有为data指定类型,即您现在使用List<Object>,您将获得一个地图列表(并且地图可以再次包含列表或地图,具体取决于内容)。

如果您可以通过内容区分对象类型,则可以编写一个简单的自定义反序列化程序,如问here(检查isA字段)