Objekt-Serialisierung in Kotlin: Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Objekt-Serialisierung in Kotlin: Überblick über Bibliotheken und praktischer Leitfaden

\n\n

Serialisierung ist der Prozess der Umwandlung komplexer Objekte (Klassen, Datenstrukturen) in ein Format, das für die Speicherung oder Übertragung über ein Netzwerk geeignet ist (JSON, XML, Protobuf). Die umgekehrte Operation – Deserialisierung – stellt das Objekt aus einem solchen Format wieder her. In Kotlin ist die Serialisierung dank seiner Prägnanz und Typsicherheit besonders elegant umgesetzt. In diesem Artikel betrachten wir drei Hauptansätze: die Standardbibliothek kotlinx.serialization sowie die beliebten Java-Lösungen Gson und Jackson, die für Kotlin angepasst wurden.

\n\n

1. kotlinx.serialization – die offizielle Lösung von JetBrains

\n\n

Die Bibliothek kotlinx.serialization ist Teil des Kotlin-Ökosystems und wird von den Sprachentwicklern unterstützt. Sie bietet einen nativen Ansatz ohne Reflexion, was eine hohe Leistung und Typsicherheit zur Kompilierzeit gewährleistet.

\n\n

Einbindung (Gradle)

\n
plugins {\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\n

Beispiel: Basisklasse und Serialisierung

\n
import 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("Alexej", 30, "alex@example.com")\n    val jsonString = Json.encodeToString(user)\n    println(jsonString)\n    // {"name":"Alexej","age":30,"email":"alex@example.com"}\n\n    val decoded = Json.decodeFromString<User>(jsonString)\n    println(decoded) // User(name=Alexej, age=30, email=alex@example.com)\n}
\n\n

Vorteile

\n
    \n
  • Typsicherheit: Serialisierungsfehler werden zur Kompilierzeit erkannt.
  • \n
  • Multiplattform-Unterstützung: Funktioniert auf JVM, JS, Native (KMP).
  • \n
  • Erweiterbarkeit: Benutzerdefinierte Serialisierer für komplexe Typen.
  • \n
  • Integrierte Unterstützung für null, enum, sealed class, Sammlungen.
  • \n
\n\n

Fortgeschrittenes Beispiel: verschachtelte Objekte und Listen

\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("Moskau", "Twerskaja"),\n        Address("SPb", "Newski")\n    ))\n    val json = Json { prettyPrint = true }\n    println(json.encodeToString(person))\n    // {\n    //    "name": "Maria",\n    //    "addresses": [\n    //        { "city": "Moskau", "street": "Twerskaja" },\n    //        { "city": "SPb", "street": "Newski" }\n    //    ]\n    // }\n}
\n\n

2. Gson – leichtgewichtig und einfach

\n\n

Die Bibliothek Gson von Google ist in der Java-Welt weit verbreitet. Für Kotlin wird sie mit zusätzlicher Konfiguration verwendet, um data class und nullable-Felder korrekt zu verarbeiten.

\n\n

Einbindung

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

Beispiel mit Gson

\n
import 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, "Laptop", 75000.0)\n    val json = gson.toJson(product)\n    println(json) // {"id":1,"title":"Laptop","price":75000.0}\n\n    val back = gson.fromJson(json, Product::class.java)\n    println(back) // Product(id=1, title=Laptop, price=75000.0)\n}
\n\n

Besonderheiten

\n
    \n
  • Erfordert keine Annotationen – funktioniert mit allen Klassen.
  • \n
  • Erfordert die explizite Angabe des Typs bei der Deserialisierung (kann bei Generics umständlich sein).
  • \n
  • Standardmäßig werden keine

Empfehlungen