嵌套 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
。
我正在使用 Retrofit 从 API returns JSON Objects 中以这种格式获取数据:
{
"error": 0
"message": "Request Successful"
"data": [ ... ]
}
我用这些 类:
用 GSON 把它取到 POJOpublic 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
。