【问题标题】:Nested Objects: Same Parent Object for multiple Child Objects嵌套对象:多个子对象的相同父对象
【发布时间】:2016-08-21 14:23:27
【问题描述】:

我正在使用 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" 字段)

【问题讨论】:

    标签: java json gson retrofit2


    【解决方案1】:

    你可以使用泛型:

    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

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多