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