0Pricing
Kotlin Academy · 课时

可序列化类

为模型添加注解

可序列化类 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。

@Serializable 注解

要使一个类可序列化,请使用 @Serializable 标注它。然后,编译器插件会为其生成序列化器。

import kotlinx.serialization.Serializable

@Serializable
data class User(val id: Int, val name: String)

适用于数据类

您可以标注任何类,但数据类是模型最常见的选择,因为它们会自动生成 equals、hashCode 和 toString。

构造函数中的所有属性都会成为序列化字段。

默认值

具有默认值的属性在解码时会变为可选属性。如果 JSON 中省略了这些属性,就会使用默认值。

@Serializable
data class Config(
    val host: String,
    val port: Int = 8080,
    val secure: Boolean = false
)

可空属性

可空类型会映射为 JSON null。没有默认值的可空属性在 JSON 中仍然是必需的(但其值可以为 null)。

@Serializable
data class Profile(
    val name: String,
    val bio: String? = null
)

使用 @SerialName 重命名字段

JSON 字段名称通常不同于 Kotlin 的命名约定。请使用 @SerialName 对它们进行映射。

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Account(
    @SerialName("user_id") val userId: Int,
    @SerialName("full_name") val fullName: String
)

使用 @Transient 忽略属性

使用 @Transient 标记属性,可以将其排除在序列化之外。瞬态属性必须具有默认值。

import kotlinx.serialization.Transient
import kotlinx.serialization.Serializable

@Serializable
data class Session(
    val token: String,
    @Transient val cachedAt: Long = 0L
)

嵌套的可序列化类

可序列化类可以包含其他可序列化类。插件会自动处理整个对象图。

@Serializable
data class Address(val city: String, val zip: String)

@Serializable
data class Company(val name: String, val address: Address)

模型中的集合

当元素可序列化时,List、Set 和 Map 等标准集合无需额外配置即可序列化。

@Serializable
data class Team(
    val name: String,
    val members: List<String>,
    val scores: Map<String, Int>
)

支持枚举

枚举类可以使用 @Serializable 标注,默认会序列化为其名称。您可以在枚举项上使用 @SerialName 进行自定义。

@Serializable
enum class Role {
    @SerialName("admin") ADMIN,
    @SerialName("user") USER
}

必需属性与可选属性总结

除非属性具有默认值,否则它在 JSON 中就是必需的。主要规则如下:

  • 没有默认值 → 必需
  • 有默认值 → 可选
  • @Transient → 忽略,且必须有默认值
  • 没有默认值的可空属性 → 必需,但值可以为 null

无法直接序列化的类型

没有内置序列化器的类型(例如 java.util.Date、java.time.Instant、UUID)需要自定义序列化器,您将在后面学习相关内容。

在没有自定义序列化器的情况下尝试序列化这些类型,会导致编译错误。

快速检查

关于 @Transient,以下哪项说法正确?

回顾

您学会了如何标注模型:

  • 在类上使用 @Serializable
  • 默认值会使字段变为可选
  • @SerialName 会重命名 JSON 键
  • @Transient 会排除字段(需要默认值)

下一步:实际进行 JSON 编码和解码。

常见问题解答

「可序列化类」课时是免费的吗?

是的 — 「可序列化类」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。

「可序列化类」这节课中我会学到什么?

为模型添加注解 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Kotlin Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「可序列化类」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Kotlin Academy 课中编写并运行代码吗?

能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. kotlinx.serialization 配置
  2. 可序列化类
  3. JSON 编码与解码
  4. 自定义序列化器
← 返回 Kotlin Academy