Sérialisation d'objets en Kotlin : aperçu des bibliothèques et guide pratique
\n\nLa sérialisation est le processus de conversion d'objets complexes (classes, structures de données) en un format pratique pour le stockage ou la transmission sur un réseau (JSON, XML, Protobuf). L'opération inverse — la désérialisation — reconstruit l'objet à partir de ce format. En Kotlin, grâce à sa concision et sa sécurité de typage, la sérialisation est implémentée de manière particulièrement élégante. Dans cet article, nous examinerons trois approches principales : la bibliothèque standard kotlinx.serialization, ainsi que les solutions Java populaires Gson et Jackson, adaptées pour Kotlin.
1. kotlinx.serialization — la solution officielle de JetBrains
\n\nLa bibliothèque kotlinx.serialization fait partie de l'écosystème Kotlin et est maintenue par les développeurs du langage. Elle offre une approche native sans réflexion, garantissant des performances élevées et une sécurité de typage à la compilation.
Intégration (Gradle)
\nplugins {\n kotlin("jvm") version "1.9.0"\n kotlin("plugin.serialization") version "1.9.0"\n}\n\ndependencies {\n implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")\n}\n\nExemple : classe de base et sérialisation
\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class User(\n val name: String,\n val age: Int,\n val email: String? = null\n)\n\nfun main() {\n val user = User("Alexei", 30, "alex@example.com")\n val jsonString = Json.encodeToString(user)\n println(jsonString)\n // {"name":"Alexei","age":30,"email":"alex@example.com"}\n\n val decoded = Json.decodeFromString<User>(jsonString)\n println(decoded) // User(name=Alexei, age=30, email=alex@example.com)\n}\n\nAvantages
\n- \n
- Sécurité de typage : les erreurs de sérialisation sont détectées à la compilation. \n
- Support multiplateforme : fonctionne sur JVM, JS, Native (KMP). \n
- Extensibilité : sérialiseurs personnalisés pour les types complexes. \n
- Prise en charge intégrée de null, enum, sealed class, collections. \n
Exemple avancé : objets imbriqués et listes
\n@Serializable\ndata class Address(val city: String, val street: String)\n\n@Serializable\ndata class Person(val name: String, val addresses: List<Address>)\n\nfun main() {\n val person = Person("Maria", listOf(\n Address("Moscou", "Tverskaïa"),\n Address("Saint-Pétersbourg", "Nevski")\n ))\n val json = Json { prettyPrint = true }\n println(json.encodeToString(person))\n // {\n // "name": "Maria",\n // "addresses": [\n // { "city": "Moscou", "street": "Tverskaïa" },\n // { "city": "Saint-Pétersbourg", "street": "Nevski" }\n // ]\n // }\n}\n\n2. Gson — léger et simple
\n\nLa bibliothèque Gson de Google est largement connue dans le monde Java. Pour Kotlin, elle est utilisée avec une configuration supplémentaire pour gérer correctement les data class et les champs nullable.
Intégration
\nimplementation("com.google.code.gson:gson:2.10.1")\n\nExemple avec Gson
\nimport com.google.gson.Gson\nimport com.google.gson.reflect.TypeToken\n\ndata class Product(val id: Int, val title: String, val price: Double?)\n\nfun main() {\n val gson = Gson()\n val product = Product(1, "Ordinateur portable", 75000.0)\n val json = gson.toJson(product)\n println(json) // {"id":1,"title":"Ordinateur portable","price":75000.0}\n\n val back = gson.fromJson(json, Product::class.java)\n println(back) // Product(id=1, title=Ordinateur portable, price=75000.0)\n}\n\nParticularités
\n- \n
- Ne nécessite pas d'annotations — fonctionne avec toutes les classes. \n
- Nécessite une indication explicite du type lors de la désérialisation (peut être gênant avec les génériques). \n
- Par défaut, ne gère pas
Aussi dans la bibliothèque
Génération de PDF en Kotlin : aperçu des bibliothèques et outils
Envoi de SMS en PHP : Bibliothèques API pour l'intégration
gRPC pour C++ : bibliothèques, exemples et guide d'utilisation
Java Image I/O API : redimensionnement et recadrage d'images | Guide
Crypto-js pour JavaScript (Node.js) : guide complet avec exemples