我的应用程序正在与之通信的 API 发送如下响应:
{
Code: 200,
Message: "HELLO",
Data: []
}
数据字段始终是SOMETHING 的数组。但是那个东西可以是一个文本节点,另一个数组,或者任何其他的各种不同的对象。
在下面的示例中,数据节点是一个汽车对象数组的数组。
Data: [ [ {car:1}, {car:2} ] ]
另一个返回类型可以是一个昆虫对象数组:
Data: [ {insect : spider} ]
我想设计一个 Gson 对象来处理这个问题,并且想知道最好的方法是什么。
我的第一个想法是有一个抽象类来保存 Code
和 Message
字段,然后有许多子类型都有自己的 Data
字段。然后我会调用 .fromJson()
将其传递给子类。
是否有更优化的设计方式让 Gson 处理这些差异?
最佳答案
我想出了我认为最好的答案。相当简单!
通过在传递给 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);
关于java - 我将如何为可以处理动态字段的 Gson 对象建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038271/