Objektserialisierung in Kotlin: Vollständiger Leitfaden zu Bibliotheken und Tools
Serialisierung ist der Prozess der Umwandlung eines Objekts in ein Format, das gespeichert (z. B. in einer Datei) oder über ein Netzwerk übertragen werden kann (über REST API, Kafka-Nachrichten usw.). Der umgekehrte Prozess – die Deserialisierung – stellt das Objekt aus diesem Format wieder her. Im Kotlin-Ökosystem gibt es mehrere leistungsstarke Bibliotheken für die Serialisierung, jede mit ihren eigenen Besonderheiten. In diesem Artikel werden wir vier Hauptansätze untersuchen: kotlinx.serialization, Gson, Moshi und Jackson.
1. kotlinx.serialization – Die native Wahl für Kotlin
Die von JetBrains entwickelte Bibliothek kotlinx.serialization ist der „Goldstandard“ für Kotlin-Projekte. Sie unterstützt Multiplattform (JVM, JS, Native) und verwendet Annotationen zur Codegenerierung während der Kompilierung.
Einbindung (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")}Anwendungsbeispiel
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("Ivan", 30, "ivan@example.com")
// Serialisierung in JSON val jsonString = Json.encodeToString(user) println(jsonString) // {"name":"Ivan","age":30,"email":"ivan@example.com"}
// Deserialisierung aus JSON val decoded = Json.decodeFromString<User>(jsonString) println(decoded) // User(name=Ivan, age=30, email=ivan@example.com)}Besonderheiten
- Null safety: Unterstützung von nullable-Feldern durch
? - Polymorphismus: Serialisierung von sealed classes und Hierarchien
- Benutzerdefinierte Formate: JSON, CBOR, Protobuf, Properties
- Leistung: Codegenerierung ohne Reflection
2. Gson – Der Klassiker von Google
Gson ist eine der ältesten Bibliotheken für Java/Kotlin. Sie ist einfach zu verwenden, nutzt jedoch Reflection, was die Leistung bei großen Datenmengen beeinträchtigen kann.
Einbindung
implementation("com.google.code.gson:gson:2.10.1")Beispiel
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, "Laptop", 79999.99)
// Serialisierung val json = gson.toJson(product) println(json) // {"id":1,"title":"Laptop","price":79999.99}
// Deserialisierung val restored = gson.fromJson(json, Product::class.java) println(restored) // Product(id=1, title=Laptop, price=79999.99)}Besonderheiten
- Einfachheit: Minimale Konfiguration
- Flexibilität: Benutzerdefinierte
TypeAdapterfür komplexe Typen - Nachteile: Reflection, keine native Unterstützung für Kotlin data class (Plugin oder
@JvmFielderforderlich)
3. Moshi – Moderne Alternative zu Gson
Moshi von Square ist eine leichte Bibliothek mit integrierter Kotlin-Unterstützung. Sie verwendet Codegenerierung durch Annotationen, was sie schneller als Gson macht.
Einbindung
implementation("com.squareup.moshi:moshi-kotlin:1.15.0")kapt("com.squareup.moshi:moshi-kotlin-codegen:1.15.0") // für CodegenerierungBeispiel
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: Auch in der Bibliothek
Arbeiten mit Daten in JavaScript (Node.js): Beliebte Bibliotheken
CLI-Frameworks für TypeScript: vollständige Übersicht und Anwendungsbeispiele
Codable Swift: Das komplette Tutorial mit Beispielen
Arbeiten mit XML in C# (.NET): vollständiger Leitfaden zum Parsen und Erstellen
Swagger/OpenAPI für C# (.NET): Generierung und Dokumentation von APIs