- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的项目中做了一个反序列化器,但是它没有被调用
我正在使用带有 GSON 的 Retrofit 2.0,这是我的 API 调用之一
@GET(UrlConstants.GET_EVENT_COMMENTS)
Call<BaseResponseObject<EventCommentsResponseObject<ItemsResponseObject<EventComment>>>> getEventComments
所以我的后端JSON数据总是这样开始的
数字 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/
我有一个这样的对象: "choice": { "000": { "id": "001", "label": "test",
我正在使用aerospike的java客户端。我希望更改 aerospike 用于 java 对象的序列化程序,即 java 序列化程序。 我打算使用其他更快的序列化库,例如PROTOSTOFF/AV
我有一个奇怪的问题,我有一个 HashMap,我将其序列化以供以后在磁盘上使用。 这是一个HashMap ConverterMetadata是我编写的用于跟踪音乐文件元数据的自定义类。 Convert
这是我的类(省略 getter 和 setter): public class ClassWithAMap { @JsonProperty("map") @JsonDeserializ
我在 python spark 应用程序中创建了一个 kafka 流,可以解析通过它的任何文本。 kafkaStream = KafkaUtils.createStream(s
我正在尝试将一些 Json 解析为 Java 对象。 有些字段需要自定义行为,所以我尝试在构造函数上使用 @JsonCreator。 好吧,它可以工作,但是对于使用 @JsonProperty 注释的
据我了解,DS.FixtureAdapter 默认情况下不使用序列化器。这是正确的吗? 我主要尝试使用夹具适配器进行自定义转换。我看到 DS.JSONSerializer 调用转换 here 的反序列
我正在使用 etaty rediscala (1.4.2) 连接到 Play 2.4 中的 Redis。我的代码如下: override def getMember(token: String): F
我将事件的有效负载作为 JSON 字符串保存到数据库中。为了在代码中只有一种版本的事件,同时仍然能够读取旧事件,我想在反序列化之前“向上转换”序列化数据。 我想到了这样的事情: public Obje
我正在使用一个总是这样响应的 API: { "stuff_i_need": [ { "title": "Hello" }, { "title":
我是一名优秀的程序员,十分优秀!