1

我的应用程序正在与之通信的 API 发送如下响应:

{
    Code: 200,
    Message: "HELLO",
    Data: []
}

Data 字段始终是SOMETHING的数组。但是那个东西可能是一个文本节点,另一个数组,或者任何其他的不同对象的分类。

在下面的示例中,数据节点是汽车对象数组的数组

Data: [ [ {car:1}, {car:2} ] ]

另一种返回类型可能是昆虫对象数组:

Data: [ {insect : spider} ]

我想设计一个 Gson 对象来处理这个问题,并且想知道最好的方法是什么。

我的第一个想法是拥有一个包含CodeandMessage字段的抽象类,然后有许多子类型都有自己的Data字段。然后我会称之为.fromJson()传递它的子类。

是否有更优化的设计方法,以便 Gson 处理差异?

4

2 回答 2

3

我想出了我认为最好的答案。非常坦率的!

在传递给 Gson 之前,通过创建 TypeToken 使类成为通用类并提供类型:

   public class Response<T> {

        private String code;
        private String message;
        private List<T> data;
    }

然后在使用 Gson 时:

   Type myCarListResponse = new TypeToken<Response<List<Car>>>(){}.getType();
   Response<List<Car>> response = gson.fromJson(json, myCarListResponse);

将 > 替换为您期望从Data节点获得的类型。上面的示例满足原始帖子中的第一个示例。

为了满足第二个例子:

  Type myInsectResponse = new TypeToken<Response<Insect>>(){}.getType();
  Response<Insect> response = gson.fromJson(json, myInsectResponse);
于 2013-08-04T01:45:23.933 回答
0

在杰克逊,你可以使用@JsonAnyGetter/Setter来实现这一点。

参考http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.html , http://wiki.fasterxml.com/JacksonFeatureAnyGetter

于 2013-08-04T02:22:01.817 回答