我在我的項目但是這也不會被調用GSON:不打電話給我解串器
我使用改造2.0 GSON取得了解串器,這是一個我的API調用
@GET(UrlConstants.GET_EVENT_COMMENTS)
Call<BaseResponseObject<EventCommentsResponseObject<ItemsResponseObject<EventComment>>>> getEventComments
所以我後端JSON數據總是開始,因爲這
- 數據(對象)
- 評論(對象)或類似食品的另一個名字,所以我也可能有FoodResp onseObject
- 項目(陣列)
3號是另一種對象的數組在這種情況下,其EventComment這是我想要反序列化EventComment解串器的
類聲明什麼
我將只顯示這不是雜亂的帖子,因爲這個問題是一個事實,即解串器不被稱爲
public class CommentDeserializer implements JsonDeserializer<EventComment> {
註冊到我的單身GSON實例。
gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.registerTypeAdapter(EventComment.class, new CommentDeserializer())
.create();
響應目標
這裏是什麼反應物體看起來像(如改造API調用聲明所示)
注意我利用這一點避免重複的代碼序列化/反序列化JSON的公用部分
public class BaseResponseObject<T> {
@SerializedName("data")
private T data;
-
public class EventCommentsResponseObject<T> {
@SerializedName("comments")
private T commentsData;
我不是上述真的很高興,因爲其他數據我要創建另一個類映射JSON
然後終於項目響應對象
public class ItemsResponseObject<T> {
@SerializedName("items")
private ArrayList<T> mItems;
這是代表一些數據的JSON數組。在這種情況下,傳入的類型是EventComment。
這裏有一個例子我JSON數據
{
"data": {
"comments": {
"items": [
{
"id": 404,
"body": "hi",
"updated_at": 1445174795,
"self": {
"href": "http://test/exmaple/404"
}
},
{
"id": 244,
"body": "cool",
"updated_at": 1445674795,
"self": {
"href": "http://test/exmaple/405"
},
}
],
}
}
}
我的改造生成器
retrofit = new Retrofit.Builder()
.baseUrl(BuildConstants.BASE_URL)
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create(getGson()))
.build();
是不是因爲一個叫registerTypeAdapter的第一個參數與改進的getEventCommen的返回值之間不匹配ts – Blackbelt
@Blackbelt如果我將其更改爲完整類型,GSON是否不會反序列化公共部分,即數據,註釋,項目。我只想從JSON數組中的每個項目的點反序列化? –
如果您創建一個不使用泛型的新的'BaseResponseObject',該怎麼辦? – rciovati