嵌套对象:多个子对象的相同父对象

时间:2016-08-21 14:23:28

标签: java json gson retrofit2

我正在使用Retrofit从API中获取数据,该API以这种格式返回JSON对象:

{
  "error": 0
  "message": "Request Successful"
  "data": [ ... ]
}

我用GSON将它带到POJO这些类:

public class SearchResponse {
    @SerializedName("error")
    @Expose
    private Integer error;
    @SerializedName("message")
    @Expose
    private String message;
    @SerializedName("data")
    @Expose
    private List<SearchResult> data;

    (Getter and Setter here)
}


public class SearchResult {
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("id")
    @Expose
    private Integer id;
    ....

    (Getter and Setter here)
}

问题是,对于我发出的每个请求,我必须创建两个新类,即使外部类总是包含相同的三个变量:"error""message""data" 。有没有办法为每个孩子使用相同的父母而不完全删除它? (我仍然需要"message"字段)

1 个答案:

答案 0 :(得分:0)

您可以使用泛型:

public class SearchResponse<T> { // T is a type variable
    @SerializedName("error")
    @Expose
    private Integer error;
    @SerializedName("message")
    @Expose
    private String message;
    @SerializedName("data")
    @Expose
    private List<T> data; // We have a list of T

    (Getter and Setter here)
}

您可以反序列化:

Type t = new TypeToken<SearchResponse<SearchResult>>(){}.getType();
SearchResponse<SearchResult> response = gson.fromJson(jsonString, t);

尽管如此,您仍然需要为每种子类型设置TypeToken