我的应用程序正在与之通信的API发送响应,如下所示:
{
Code: 200,
Message: "HELLO",
Data: []
}
数据字段始终是 SOMETHING 的数组。但某些可能是文本的单个节点,另一个其他的数组,或任何其他各种不同的对象。
在下面的示例中,数据节点是汽车对象数组的数组。
Data: [ [ {car:1}, {car:2} ] ]
另一种返回类型可能是一个昆虫对象数组:
Data: [ {insect : spider} ]
我想设计一个Gson对象来处理这个问题,并想知道最好的方法是什么。
我的第一个想法是拥有一个包含Code
和Message
字段的抽象类,然后有许多子类型都有自己的Data
字段。然后我只需要调用.fromJson()
将子类传递给它。
是否有更优化的设计方法,以便Gson能够处理差异?
答案 0 :(得分: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);
替换&gt;具有您期望从Data
节点获得的类型。以上示例满足原始帖子中的第一个示例。
满足第二个例子:
Type myInsectResponse = new TypeToken<Response<Insect>>(){}.getType();
Response<Insect> response = gson.fromJson(json, myInsectResponse);
答案 1 :(得分:0)
在杰克逊,您可以使用@JsonAnyGetter/Setter
来实现这一目标。
参考http://www.cowtowncoder.com/blog/archives/2011/07/entry_458.html,http://wiki.fasterxml.com/JacksonFeatureAnyGetter