Kotlin中的对象序列化:库与代码示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin中的对象序列化:库与工具完整指南



序列化是将对象转换为可保存(例如保存到文件)或通过网络传输(通过REST API、Kafka消息等)的格式的过程。反向过程——反序列化——则从该格式恢复对象。在Kotlin生态系统中,有多个强大的序列化库,每个都有其特点。在本文中,我们将分析四种主要方法:kotlinx.serialization、Gson、Moshi和Jackson。



1. kotlinx.serialization —— Kotlin的原生选择



由JetBrains开发的kotlinx.serialization库是Kotlin项目的“黄金标准”。它支持多平台(JVM、JS、Native),并使用注解在编译阶段生成代码。



依赖配置(Gradle)

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

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


使用示例

import kotlinx.serialization.Serializableimport kotlinx.serialization.json.Json

@Serializabledata class User(val name: String, val age: Int, val email: String? = null)

fun main() { val user = User("伊万", 30, "ivan@example.com")

// 序列化为JSON val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"伊万","age":30,"email":"ivan@example.com"}

// 从JSON反序列化 val decoded = Json.decodeFromString<User>(jsonString) println(decoded) // User(name=伊万, age=30, email=ivan@example.com)}


特点

  • 空安全:通过?支持可空字段
  • 多态:支持密封类和继承体系的序列化
  • 自定义格式:JSON、CBOR、Protobuf、Properties
  • 性能:无反射的代码生成


2. Gson —— Google的经典库



Gson是Java/Kotlin最古老的库之一。它使用简单,但使用反射,这可能会在处理大量数据时降低性能。



依赖配置

implementation("com.google.code.gson:gson:2.10.1")


示例

import com.google.gson.Gson

data class Product(val id: Int, val title: String, val price: Double)

fun main() { val gson = Gson() val product = Product(1, "笔记本电脑", 79999.99)

// 序列化 val json = gson.toJson(product) println(json) // {"id":1,"title":"笔记本电脑","price":79999.99}

// 反序列化 val restored = gson.fromJson(json, Product::class.java) println(restored) // Product(id=1, title=笔记本电脑, price=79999.99)}


特点

  • 简单:最少配置
  • 灵活:支持自定义TypeAdapter处理复杂类型
  • 缺点:使用反射,原生不支持Kotlin data class(需要插件或@JvmField)


3. Moshi —— Gson的现代替代品



Square公司的Moshi是一个轻量级库,开箱即用支持Kotlin。它通过注解使用代码生成,因此比Gson更快。



依赖配置

implementation("com.squareup.moshi:moshi-kotlin:1.15.0")kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0") // 用于代码生成


示例

import com.squareup.moshi.Moshiimport com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

@JsonClass(generateAdapter = true)data class Book(val isbn: String, val title: String, val authors:

推荐