inline class および value class で kotlinx.serialization (JSON) が動く組み合わせを調べてみた
inline class のときのコード
- @Serializable
- inline class ItemId(val value: String)
-
- @Serializable
- data class Item(val id: ItemId, val name: String)
-
- fun main() {
- val item = Item(ItemId("1"), "Android")
- val json = Json.encodeToString(item)
- println(json)
- println(Json.decodeFromString<Item>(json))
- }
@Serializable
inline class ItemId(val value: String)
@Serializable
data class Item(val id: ItemId, val name: String)
fun main() {
val item = Item(ItemId("1"), "Android")
val json = Json.encodeToString(item)
println(json)
println(Json.decodeFromString<Item>(json))
}
value class のときのコード
- @Serializable
- @JvmInline
- value class ItemId(val value: String)
-
- @Serializable
- data class Item(val id: ItemId, val name: String)
-
- fun main() {
- val item = Item(ItemId("1"), "Android")
- val json = Json.encodeToString(item)
- println(json)
- println(Json.decodeFromString<Item>(json))
- }
@Serializable
@JvmInline
value class ItemId(val value: String)
@Serializable
data class Item(val id: ItemId, val name: String)
fun main() {
val item = Item(ItemId("1"), "Android")
val json = Json.encodeToString(item)
println(json)
println(Json.decodeFromString<Item>(json))
}
Kotlin: 14.32, kotlinx.serialization: 1.1.0 + inline class
ビルドエラーになる
e: org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during file facade code generation
Kotlin: 1.4.32, kotlinx.serialization: 1.2.1 + inline class
ビルドエラーになる
e: org.jetbrains.kotlin.backend.common.BackendException: Backend Internal error: Exception during file facade code generation
Kotlin: 1.4.32, kotlinx.serialization: 1.1.0 + value class
@JvmInline が無いのでビルドエラーになる
Kotlin: 1.4.32, kotlinx.serialization: 1.2.1 + value class
@JvmInline が無いのでビルドエラーになる
Kotlin: 1.5.0, kotlinx.serialization: 1.1.0 + inline class
動く
Kotlin: 1.5.0, kotlinx.serialization: 1.2.1 + inline class
動く
Kotlin: 1.5.0, kotlinx.serialization: 1.1.0 + value class
動く
Kotlin: 1.5.0, kotlinx.serialization: 1.2.1 + inline class
動く
Kotlin を 1.5.0 にすれば kotlinx.serialization を 1.2 にしなくても inline class と value class 両方で動いた。