kotlin-serialization
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseKotlin Serialization Skill
Kotlin Serialization 技能指南
Type-safe serialization with kotlinx.serialization.
使用kotlinx.serialization实现类型安全的序列化。
Topics Covered
涵盖主题
JSON Serialization
JSON序列化
kotlin
@Serializable
data class User(
val id: Long,
val name: String,
@SerialName("email_address") val email: String,
val createdAt: Instant = Instant.now()
)
val json = Json {
ignoreUnknownKeys = true
encodeDefaults = true
prettyPrint = true
}
val user = json.decodeFromString<User>(jsonString)
val output = json.encodeToString(user)kotlin
@Serializable
data class User(
val id: Long,
val name: String,
@SerialName("email_address") val email: String,
val createdAt: Instant = Instant.now()
)
val json = Json {
ignoreUnknownKeys = true
encodeDefaults = true
prettyPrint = true
}
val user = json.decodeFromString<User>(jsonString)
val output = json.encodeToString(user)Custom Serializers
自定义序列化器
kotlin
object InstantSerializer : KSerializer<Instant> {
override val descriptor = PrimitiveSerialDescriptor("Instant", PrimitiveKind.LONG)
override fun serialize(encoder: Encoder, value: Instant) = encoder.encodeLong(value.toEpochMilli())
override fun deserialize(decoder: Decoder) = Instant.ofEpochMilli(decoder.decodeLong())
}
@Serializable
data class Event(
@Serializable(with = InstantSerializer::class) val timestamp: Instant
)kotlin
object InstantSerializer : KSerializer<Instant> {
override val descriptor = PrimitiveSerialDescriptor("Instant", PrimitiveKind.LONG)
override fun serialize(encoder: Encoder, value: Instant) = encoder.encodeLong(value.toEpochMilli())
override fun deserialize(decoder: Decoder) = Instant.ofEpochMilli(decoder.decodeLong())
}
@Serializable
data class Event(
@Serializable(with = InstantSerializer::class) val timestamp: Instant
)Polymorphic Serialization
多态序列化
kotlin
@Serializable
sealed class Response {
@Serializable @SerialName("success")
data class Success(val data: String) : Response()
@Serializable @SerialName("error")
data class Error(val message: String) : Response()
}
val json = Json { classDiscriminator = "type" }kotlin
@Serializable
sealed class Response {
@Serializable @SerialName("success")
data class Success(val data: String) : Response()
@Serializable @SerialName("error")
data class Error(val message: String) : Response()
}
val json = Json { classDiscriminator = "type" }Troubleshooting
问题排查
| Issue | Resolution |
|---|---|
| "Serializer not found" | Add @Serializable or plugin |
| Unknown property fails | Set ignoreUnknownKeys = true |
| 问题 | 解决方法 |
|---|---|
| 找不到序列化器 | 添加@Serializable注解或插件 |
| 未知属性导致失败 | 设置ignoreUnknownKeys = true |
Usage
使用方式
Skill("kotlin-serialization")Skill("kotlin-serialization")