Kotlin Gson自定义解串器列表

如何在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)的问题,或者我做错了什么?

问题是Kotlin编译器为List添加通配符,即List<CharSequense>编译为List<? extends Charsequence> List<? extends Charsequence>

解决方案是使用MutableList

 object : TypeToken<MutableList<Advert>>() {}.type 

或者晚餐通配符

 object : TypeToken<List<@JvmSuppressWildcards Advert>>() {}.type