Kotlin Gson自定义解串器列表
问题描述:
如何在Gson注册自定义Json解串器?Kotlin Gson自定义解串器列表
当我在java代码中注册反序列化程序时,所有工作都正常,但是当我将Kotlin转换为Java - 未调用的反序列化程序方法时。
科特林注册码:
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)的问题,或者我做错了什么?
答
问题是Kotlin编译器为List
增加了一个通配符,即i。即List<CharSequense>
编译为List<? extends Charsequence>
。
的解决方法是,使用MutableList
object : TypeToken<MutableList<Advert>>() {}.type
或supperss通配符
object : TypeToken<List<@JvmSuppressWildcards Advert>>() {}.type
谢谢,这是解决我的问题! –