Skip to content

Kotlin序列化

Kotlin 序列化总结

序列化与反序列化简介

序列化是将应用程序中的数据转换为可传输或存储的格式(如网络传输、数据库存储或文件保存)的过程。反序列化则是将外部来源的数据读取并转换为运行时对象的过程。序列化和反序列化对于大多数需要与第三方交换数据的应用程序来说至关重要。

Kotlin 中的序列化工具

在 Kotlin 中,序列化工具位于 kotlinx.serialization 组件中。它包含 org.jetbrains.kotlin.plugin.serialization Gradle 插件、运行时库和编译器插件。这些工具支持多种平台(JVM、JavaScript、Native)和多种序列化格式(如 JSON、CBOR、Protocol Buffers 等)。

序列化库

kotlinx.serialization 提供了一套适用于所有支持平台的库,包括 JSON、CBOR、Protocol Buffers 等。这些库的名称通常以 kotlinx-serialization- 开头,后跟相应的序列化格式,如 kotlinx-serialization-json。需要注意的是,除了 JSON 格式外,其他格式的库目前还处于实验阶段,其 API 可能会随时变更。

示例:JSON 序列化

  1. 添加插件和依赖项:在构建脚本中应用 Kotlin 序列化 Gradle 插件,并添加 JSON 序列化库的依赖项。
  2. 创建可序列化类:通过在数据类上添加 @Serializable 注解使其可序列化。
  3. 序列化和反序列化:使用 Json.encodeToString() 方法将对象序列化为 JSON 字符串,使用 Json.decodeFromString() 方法将 JSON 字符串反序列化为对象。

具体代码示例:

import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json

@Serializable
data class Data(val a: Int, val b: String)

fun main() {
    // 序列化
    val data = Data(42, "str")
    val json = Json.encodeToString(data)
    // json 字符串为: {"a":42,"b":"str"}

    // 反序列化
    val parsedData = Json.decodeFromString<Data>("""{"a":42,"b":"str"}""")
}

常见问题与解决方法

  • 序列化插件未正确应用:如果遇到 kotlinx.serialization compiler plugin is not applied to the module 警告或运行时错误,确保在构建脚本中正确配置了序列化插件和依赖项,并重新导入项目。
  • 检查构建脚本:确保在项目级和模块级的 build.gradle.kts 文件中正确应用了序列化插件。

项目级 build.gradle.kts 示例:

plugins {
    kotlin("plugin.serialization") version "1.9.0" apply false
}

模块级 build.gradle.kts 示例:

plugins {
    kotlin("plugin.serialization")
}
dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
}

Ref

https://www.soinside.com/question/YZVxextthSXtEHhcF2oDaA https://book.kotlincn.net/text/serialization.html