嵌套 Objects:多个 Child Objects 相同 Parent Object

Nested Objects: Same Parent Object for multiple Child Objects

我正在使用 Retrofit 从 API returns JSON Objects 中以这种格式获取数据:

{
  "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)
}

问题是,对于我提出的每个请求,我都必须提出两个新的 Classes,即使外部 Class 始终包含相同的三个变量:"error""message""data"。有什么方法可以在不完全删除的情况下对每个 child 使用相同的 Parent 吗? (我仍然需要 "message" 字段)

您可以使用泛型:

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