Kotlin-Data-Classes und Serialisierungsbibliotheken
Kotlin-Data-Classes sind der idiomatische Weg JSON zu modellieren: Sie generieren automatisch equals(), hashCode(), toString() und copy(). Der Generator erzeugt Data-Class-Deklarationen mit einem primären Konstruktor der jede Eigenschaft auflistet. val-Eigenschaften werden standardmäßig für Unveränderlichkeit verwendet; ein Toggle wechselt zu var für veränderliche Modelle.
Kotlinx.serialization ist die Kotlin-first-Bibliothek von JetBrains, die in Kotlin-Multiplatform- und Ktor-Projekten weit verbreitet ist. Der Generator fügt jedem Klassen die @Serializable-Annotation hinzu und @SerialName("key") zu Eigenschaften deren Namen vom JSON-Schlüssel abweichen. Der Gson-Modus fügt @SerializedName("key") für Android-Projekte hinzu die noch Gson mit Retrofit verwenden.
Der Moshi-Modus generiert @JsonClass(generateAdapter = true)-Annotationen und @Json(name = "key") für Eigenschaftsnamen-Overrides. Moshi ist in der Android-Entwicklung wegen seines Kotlin-Codegen-Adapters beliebt der Reflection zur Laufzeit vermeidet.
Typ-Mapping und nullable Eigenschaften
JSON-Zeichenketten werden zu String, Ganzzahlen zu Int (oder Long für große Werte), Dezimalzahlen zu Double, Booleans zu Boolean und Arrays zu List<T>. Verschachtelte Objekte generieren separate Data-Classes. Eigenschaften die in einigen JSON-Objekten null sind oder in einigen Array-Elementen fehlen werden als T? (nullable) mit dem Standardwert null im Konstruktor typisiert.
Kotlins Typsystem unterscheidet non-null (T) von nullable (T?) Typen auf Sprachebene, was natürlich auf die Präsenz/Absenz-Unterscheidung in JSON abbildet. Der Generator markiert ein Feld korrekt als nullable wenn es im JSON-Beispiel als null erscheint oder in einigen Array-Objekten fehlt.
Bei kotlinx.serialization werden Eigenschaften mit Standardwerten automatisch bei der Serialisierung übersprungen wenn sie dem Standard entsprechen. Das bedeutet nullable Eigenschaften vom Typ T? = null werden aus der serialisierten Ausgabe weggelassen wenn sie null sind.
Android- und Kotlin-Multiplatform-Workflows
Android-Entwickler die Retrofit verwenden definieren typischerweise Interface-Methoden deren Rückgabetyp eine Kotlin-Data-Class ist. Fügen Sie die API-Antwort ein, generieren Sie eine Data-Class mit Gson- oder Moshi-Annotationen und verwenden Sie sie als Retrofit-Call-Typ.
Kotlin Multiplatform Mobile (KMM)-Projekte teilen Datenmodelle zwischen Android und iOS. Kotlinx.serialization ist die empfohlene Bibliothek für KMM wegen Multiplattform-Unterstützung. Die generierten @Serializable-Data-Classes funktionieren auf allen KMM-Zielen ohne Änderung.
Ktor-Serverprojekte verwenden kotlinx.serialization nativ. Der Generator erzeugt Data-Classes die direkt als Ktor-Routen-Handler-Parametertypen und Antwort-Bodies verwendet werden können.