Sérialisation d'objets en Kotlin : guide complet des bibliothèques et outils
La sérialisation est le processus de conversion d'un objet dans un format qui peut être sauvegardé (par exemple, dans un fichier) ou transmis sur un réseau (via une API REST, des messages Kafka, etc.). Le processus inverse — la désérialisation — reconstruit l'objet à partir de ce format. Dans l'écosystème Kotlin, il existe plusieurs bibliothèques puissantes pour la sérialisation, chacune avec ses propres caractéristiques. Dans cet article, nous examinerons quatre approches principales : kotlinx.serialization, Gson, Moshi et Jackson.
1. kotlinx.serialization — le choix natif pour Kotlin
Développée par JetBrains, la bibliothèque kotlinx.serialization est la « référence » pour les projets Kotlin. Elle prend en charge la multiplateforme (JVM, JS, Native) et utilise des annotations pour la génération de code à la compilation.
Intégration (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")}Exemple d'utilisation
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")
// Sérialisation en JSON val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Иван","age":30,"email":"ivan@example.com"}
// Désérialisation depuis JSON val decoded = Json.decodeFromString<User>(jsonString) println(decoded) // User(name=Иван, age=30, email=ivan@example.com)}Caractéristiques
- Null safety : prise en charge des champs nullable via
? - Polymorphisme : sérialisation des sealed class et hiérarchies
- Formats personnalisés : JSON, CBOR, Protobuf, Properties
- Performances : génération de code sans réflexion
2. Gson — le classique de Google
Gson est l'une des plus anciennes bibliothèques pour Java/Kotlin. Elle est simple à utiliser, mais utilise la réflexion, ce qui peut réduire les performances sur de gros volumes de données.
Intégration
implementation("com.google.code.gson:gson:2.10.1")Exemple
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)
// Sérialisation val json = gson.toJson(product) println(json) // {"id":1,"title":"Ноутбук","price":79999.99}
// Désérialisation val restored = gson.fromJson(json, Product::class.java) println(restored) // Product(id=1, title=Ноутбук, price=79999.99)}Caractéristiques
- Simplicité : configuration minimale
- Flexibilité :
TypeAdapterpersonnalisés pour les types complexes - Inconvénients : réflexion, pas de support natif pour les data class Kotlin (nécessite un plugin ou
@JvmField)
3. Moshi — l'alternative moderne à Gson
Moshi de Square est une bibliothèque légère avec un support natif de Kotlin. Elle utilise la génération de code via des annotations, ce qui la rend plus rapide que Gson.
Intégration
implementation("com.squareup.moshi:moshi-kotlin:1.15.0")kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0") // pour la génération de codeExemple
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: