【发布时间】:2018-01-01 19:57:42
【问题描述】:
如何在 Gson 中注册自定义 Json 反序列化器?
当我在 Java 代码中注册反序列化器时一切正常,但是当我将 Kotlin 转换为 Java 时 - 没有调用反序列化器方法。
Kotlin 注册码:
val listType: Type = object : TypeToken<List<Advert>>() {}.type
val gson = GsonBuilder()
.registerTypeAdapter(listType, deserializer)
val retrofit = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
Java 代码:
Type listType = new TypeToken<List<Advert>>() {}.getType();
Gson gson = new GsonBuilder()
.registerTypeAdapter(listType, deserializer)
Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create(gson))
反序列化声明:
class AdvertsDeserializer : JsonDeserializer<List<Advert>> {
override fun deserialize(json: JsonElement?, typeOfT: Type?,
context: JsonDeserializationContext?): List<Advert> {
方法调用
// list is List<Advert>
service.getAdverts()
.subscribe({
list ->
viewState.showAdvertsList(list)
}, {
error ->
error.printStackTrace()
})
据我了解 - Json 对象(listType)的类型有问题,或者我做错了什么?
【问题讨论】:
标签: java android json gson kotlin