我在我的项目但是这也不会被调用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