Сериализация объектов в 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.Serializable
import kotlinx.serialization.json.Json

@Serializable
data 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)
}

Особенности

  • Null safety: поддержка nullable-полей через ?
  • Полиморфизм: сериализация sealed class и иерархий
  • Кастомные форматы: 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

Moshi от Square — это лёгкая библиотека с поддержкой 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.Moshi
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory

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

fun main() {
    val moshi = Moshi.Builder()
        .addLast(KotlinJsonAdapterFactory())
        .build()

    val adapter = moshi.adapter(Book::class.java)
    val book = Book("978-0-13-468599-1", "Kotlin in Action", listOf("D. Jemerov", "S. Isakova"))                    

Рекомендаций