首页 > 解决方案 > 用于注释模型的 Moshi 适配器

问题描述

我目前正在使用 Moshi 适配器将一些 json raw 转换为给定类型。在我使用带注释的模型之前,它工作正常。

我猜我应该在旁边的适配器中添加另一个参数,Player::class.java但我不知道是什么。

这是一个例子:

data class Player(
    val username: String,
    @Json(name = "lucky number")
    val luckyNumber: Int
)

private val playerStubRaw = "{\n" +
    "  \"username\": \"jesse\",\n" +
    "  \"lucky number\": 32\n" +
    "}"

@Test
fun doSomething() {
    val moshi = Moshi.Builder().build()
    val player = moshi.adapter(Player::class.java).fromJson(playerStubRaw)
    // player.luckyNumber == 0
}

luckyNumber值为 0 而不是 32。

知道我应该怎么做才能让它工作吗?

提前致谢,

标签: androidjsonkotlinmoshi

解决方案


要使用 Kotlin,Moshi 需要反射 KotlinJsonAdapterFactory(来自 moshi-kotlin 工件)或代码生成适配器(来自 moshi-kotlin-codegen 工件)。 https://github.com/square/moshi#kotlin
在 Moshi 的未来版本中,将抛出适当的错误来说明此要求。


推荐阅读