我目前正在使用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。
知道我该怎么做才能让它发挥作用吗?
提前致谢,
为了与Kotlin合作,Moshi需要反射的KotlinJsonAdapterFactory(来自moshi-kotlin神器)或代码生成适配器(来自moshi-kotlin-codegen神器)。 https://github.com/square/moshi#kotlin 在将来的Moshi版本中,将提出适当的错误来说明这一要求。
使用moshi-kotlin-codegen工件,您还需要在类上添加@JsonClass(generateAdapter = true)以使解码正常工作,而不将该属性设置为默认值0
所以在将kotlin-kapt插件和依赖关系kapt "com.squareup.moshi:moshi-kotlin-codegen:1.8.0"
添加到app build gradle之后,如下所示注释该类:
@JsonClass(generateAdapter = true)
data class Player(
val username: String,
@Json(name = "lucky number")
val luckyNumber: Int
)