小编Mam*_*rey的帖子

Kotlin Gson定制解串器列表

如何在Gson中注册自定义Json反序列化器?

当我在java代码中注册反序列化器时一切正常,但是当我将Kotlin转换为Java时 - 没有调用deserializer方法.

Kotlin注册码:

val listType: Type = object : TypeToken<List<Advert>>() {}.type
val gson = GsonBuilder()
           .registerTypeAdapter(listType, deserializer)

val retrofit = Retrofit.Builder()
               .addConverterFactory(GsonConverterFactory.create(gson))
Run Code Online (Sandbox Code Playgroud)

Java代码:

Type listType = new TypeToken<List<Advert>>() {}.getType();
Gson gson = new GsonBuilder()
            .registerTypeAdapter(listType, deserializer)

Retrofit retrofit = new Retrofit.Builder()
            .addConverterFactory(GsonConverterFactory.create(gson))
Run Code Online (Sandbox Code Playgroud)

反序列化器声明:

class AdvertsDeserializer : JsonDeserializer<List<Advert>> {
override fun deserialize(json: JsonElement?, typeOfT: Type?,
                         context: JsonDeserializationContext?): List<Advert> {
Run Code Online (Sandbox Code Playgroud)

方法调用

// list is List<Advert>
service.getAdverts()
            .subscribe({
                list ->
                viewState.showAdvertsList(list)
            }, {
                error ->
                error.printStackTrace()
            })
Run Code Online (Sandbox Code Playgroud)

据我所知 - Json对象的类型问题(listType),或者我做错了什么?

java android json gson kotlin

6
推荐指数
1
解决办法
1578
查看次数

标签 统计

android ×1

gson ×1

java ×1

json ×1

kotlin ×1