gpt4 book ai didi

java - GSON:不调用我的解串器

转载 作者:行者123 更新时间:2023-12-05 07:52:48 25 4
gpt4 key购买 nike

我在我的项目中做了一个反序列化器,但是它没有被调用

我正在使用带有 GSON 的 Retrofit 2.0,这是我的 API 调用之一

@GET(UrlConstants.GET_EVENT_COMMENTS)
Call<BaseResponseObject<EventCommentsResponseObject<ItemsResponseObject<EventComment>>>> getEventComments

所以我的后端JSON数据总是这样开始的

  1. 数据(对象)
  2. 评论(对象)或其他名称,如 Foods,所以我可能还有一个 FoodResponseObject
  3. 项目(数组)

数字 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();

响应对象

这是响应对象的样子(如 Retrofit API 调用声明中所示)

注意我使用它来避免重复代码来序列化/反序列化 JSON 的公共(public)部分

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();

最佳答案

您创建的新 gson 知道您的反序列化器,但改造库对您的新 Gson 对象一无所知。所以你应该在创建 RestAdapter 时调用 setCoverter():

new RestAdapter.Builder()
.setEndpoint(API.ENDPOINT)
.setConverter(new GsonConverter(yourgson))
.build()
.create(API.class);

关于java - GSON:不调用我的解串器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33211991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com