无法使用kotlinx.serialization

时间:2018-01-23 23:08:00

标签: android generics serialization kotlin retrofit

在Android项目中,我尝试使用 kotlinx.serialization Retrofit 从远程端点解析Json响应。我在设置改造实例时使用Jake Warthon的https://github.com/JakeWharton/retrofit2-kotlinx-serialization-converter来设置转换器

Retrofit.Builder()
    .baseUrl(baseUrl)
    .addConverterFactory(stringBased(contentType, ::parse, ::stringify))
    .addCallAdapterFactory(CoroutineCallAdapterFactory())
    .build()

我有以下使用@Serializable注释的模型,我想用它来解析Json响应

import kotlinx.serialization.Serializable

@Serializable
data class Response<out T>(val groups: List<GroupsResponse<T>>)

请注意,Response和嵌套的GroupsResponse都定义了泛型类型。我一直在浏览docs,但我无法理解泛型和 kotlinx.serialization 如何一起玩,虽然它确实提到它支持泛型并且你应该访问使用生成的序列化程序方法的那些模型的序列化程序。我根据 kotlinx.serialization 和Jake的库中的文档设置了项目以使用正确的插件,但问题是该项目甚至没有编译,因为我得到以下类型的构建过程执行 kaptDebugKotlin gradle任务

时出错
e: /Users/nico/Dev/git/edreams/workshops/K-Places/data/build/tmp/kapt3/stubs/debug/com/edreams/android/workshops/kotlin/data/venues/remote/response/Response.java:75: error: non-static type variable T cannot be referenced from a static context
public static final class $serializer implements kotlinx.serialization.KSerializer<com.edreams.android.workshops.kotlin.data.venues.remote.response.Response<? extends T>> {

e: /Users/nico/Dev/git/edreams/workshops/K-Places/data/build/tmp/kapt3/stubs/debug/com/edreams/android/workshops/kotlin/data/venues/remote/response/GroupsResponse.java:109: error: cannot find symbol
    kotlinx.serialization.KSerializer<T0> typeSerial0) {
symbol:   class T0
location: class $serializer

我错过了什么?任何帮助将不胜感激

0 个答案:

没有答案