用于注释模型的Moshi适配器

时间:2019-02-04 16:59:06

标签: android json kotlin 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。

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

预先感谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

使用moshi-kotlin-codegen工件,您还需要在类上添加@JsonClass(generateAdapter = true),以使解码正常工作,并且不将属性设置为默认值0

因此,在将kotlin-kapt插件和依赖项kapt "com.squareup.moshi:moshi-kotlin-codegen:1.8.0"添加到应用程序构建gradle后,请对该类进行注释,如下所示:

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