Десериализовать ответ с помощью Kotlinx. Сериализация и модернизация - PullRequest
0 голосов
/ 12 апреля 2020

Я использую kotlinx.serialization и implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.5.0") с Retrofit2 Возможно, я упускаю что-то очевидное, но я просто не соединяю 2 и 2 на этом.

У меня есть Сериализуемый класс, у которого есть список другого сериализуемого класса:

@Serializable
data class A(
    val resultCount: Int,
    val results: List<B>
)

@Serializable
data class B(
    val x: Int,
    val y: Int,
    val z: Int
)

И установка для модификации, подобная этой:

fun provideRetrofit(): Retrofit {
    val contentType = MediaType.get("application/json")
    return Retrofit.Builder()
            .baseUrl(BaseUrl)
            .addConverterFactory(Json.asConverterFactory(contentType))
            .build()
}

У меня есть служба:

@GET("search/")
suspend fun GetStuff(): A

Когда Я делаю сетевой вызов GetStuff, ожидая получения экземпляра A, получаю следующее исключение: kotlinx.serialization.SerializationException: Can't locate argument-less serializer for class A. For generic classes, such as lists, please provide serializer explicitly. Итак, я предполагаю, что я ожидаю, что я предоставлю сериализатор для списка?

Я прочитал Я должен быть в состоянии использовать сериализатор списка, например B.serializer().list, но я не уверен, где это использовать в моем контексте, и когда я пытаюсь поместить его в любое место, я получаю Unresolved reference: serializer.

...