仅反序列化几个属性

Deserialize only few properties

当使用 Kotlin 和 Moshi 解析 api 响应时,我收到相当大的 JSON 对象返回。

但是,我看到的所有示例都创建了一个对象以传递给包含所有属性的 adapter()。但是,我只需要其中的4-5个。

我怎样才能做到这一点?目前这不起作用:

val moshi = Moshi.Builder().build()

val jsonAdapter = moshi.adapter(OnLoadUser::class.java)

val onLoadUser = jsonAdapter.nullSafe().lenient().fromJson(data)

它给出了这个错误:

E/EventThread: Task threw exception
    java.lang.IllegalArgumentException: Cannot serialize Kotlin type com.biz.app.models.OnLoadUser. Reflective serialization of Kotlin classes without using kotlin-reflect has undefined and unexpected behavior. Please use KotlinJsonAdapterFactory from the moshi-kotlin artifact or use code gen from the moshi-kotlin-codegen artifact.
        at com.squareup.moshi.ClassJsonAdapter.create(ClassJsonAdapter.java:97)
        at com.squareup.moshi.Moshi.adapter(Moshi.java:145)
        at com.squareup.moshi.Moshi.adapter(Moshi.java:105)

确实是一个很大的JSON对象,我只需要4个属性:

{
name: 'John Doe',
email: 'john.doe@gmail.com',
token: 'QWERTY',
guid: '1234-5678-ASDF-9012'
...
}

@Transient注释你想跳过的属性,它们将被moshi忽略。

问题是我没有使用 KotlinJsonAdapterFactory()。我必须添加它:

val moshi = Moshi.Builder().add(KotlinJsonAdapterFactory()).build()

并且也在 gradle.build 中,以便它可以作为导入使用:

implementation("com.squareup.moshi:moshi-kotlin:1.12.0")

执行此操作后,它可以使用部分 Kotlin 对象正确解析 JSON 数据。