Escribe para buscar…

Serialitzadors

La funció d'un serialitzador es determinar com es descomposa un objecte en les seves propietats constituents.

Esta página todavía no se ha traducido — se muestra en su idioma original:English

Introducció

Cada format de codificació representa un objecte d’una manera específic: XML i JSON poden representar el mateix objecte, però ho fan de manera diferent.

La funció d’un serialitzador es determinar com es descomposa un objecte en les seves propietats constituents.

Fins ara hem utilitzat:

  1. Serialitzadors que es deriven de manera automàtica a partir de l’anotació @Serializable

  2. Serialitzadors que ja estan implementat per les classes bàsiques.

Per exemple, a continuació tenim una classe Color que te un propietat rgb de tipus Int per guardar el codi del color:

kotlin
@Serializable
class Color(val rgb: Int)

fun main() {
    val green = Color(0x00ff00)
    println(Json.encodeToString(green))
}  

Per defecte, aquesta classe serialitza la propietat rgb a JSON mitjnaçant:

  1. Un serialitzador derivat a partir de la classe Color
  2. Un serialitzador ja implementat per a la classe Int
json
{ "rgb": 65280 }

I ara anem ha explicar com es fa.

Serialitzador

Cada tipus concret necessita un serialitzador específic, que és un classe que implementa la interfície [KSerializer](https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization/-k-serializer/index.html.

.serializer()

Quan marques una classe amb l’anotació @Serializable, com has fet amb la classe Color, el plugin del compilador genera de manera automàtica una classe que implementa la interfice KSerializer amb el codi necessari per serialitzar aquesta, i només aquesta classe.

Com és lògic, el serializador quan ha de serialitzar un objecte necessita un objecte que implementi la classe que s’ha generat de manera automàtica.

Però enlloc de crear un objecte cada cop que ha de serialitzar un objecte, cosa que seria una autèntica burrada en termes de rendiment, el plugin del compilador també crea un objecte complementari de la classe que has anotat amb @Serializable.

L’objecte complementari té la funció .serializer() que retorna una única instància de la classe que implementa la interfície KSerializerque s’ha generat automàticament.

De la mateixa que el serialitzador accedeix a aquesta instància de manera automàtica, tu també pots, ja que es pot utilitzar de manera concurrent sense problemes:

kotlin
fun main() {
    val colorSerializer: KSerializer<Color> = Color.serializer()
    println(colorSerializer.descriptor)
}

La instància de tipus KSerializer té la propietat descriptor que descriu l’estrucutra de la classe serialitzada:

shell
Color(rgb: kotlin.Int)

Estás leyendo una vista previa.

Inicia sesión para leer el artículo completo. Cualquier cuenta abre 4 artículos gratuitos al mes; el alumnado y el profesorado leen las páginas de su curso sin límite.

Iniciar sesión