kotlinx serialization je knižnica od JetBrainsu pre serializáciu a deserializáciu dát v Kotline. Na rozdiel od Gson je typovo bezpečná a generuje kód pri kompilácii.
V build.gradle.kts pridáme plugin:
plugins {
kotlin("jvm") version "2.0.21"
kotlin("plugin.serialization") version "2.0.21"
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.3")
}
Označíme triedu anotáciou @Serializable:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class Person(val name: String, val age: Int)
fun main() {
val person = Person("Janko", 25)
// Objekt na JSON
val json = Json.encodeToString(person)
println(json) // {"name":"Janko","age":25}
// JSON na objekt
val parsed = Json.decodeFromString<Person>(json)
println(parsed) // Person(name=Janko, age=25)
}
Serializácia funguje aj s zoznamami a mapami:
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
@Serializable
data class Student(val name: String, val grades: List<Int>)
fun main() {
val students = listOf(
Student("Janko", listOf(1, 2, 1)),
Student("Fero", listOf(2, 1, 1))
)
val json = Json.encodeToString(students)
println(json)
// [{"name":"Janko","grades":[1,2,1]},{"name":"Fero","grades":[2,1,1]}]
val parsed = Json.decodeFromString<List<Student>>(json)
println(parsed)
}
Pri parsovaní JSON z API sa často stretneme s neznámymi poľami. Nastavíme ignoreUnknownKeys:
val json = Json { ignoreUnknownKeys = true }
val parsed = json.decodeFromString<Person>(jsonString)
@Serializableanotácia funguje aj predata class, aj pre bežnéclass.
Nastav serializačný plugin a závislosť kotlinx-serialization-json v Gradle projekte.
Označ dátovú triedu Produkt anotáciou @Serializable a serializuj jej objekt do JSON.
Deserializuj zoznam objektov z JSON, ktorý navyše obsahuje neznáme pole, s použitím ignoreUnknownKeys.