Use la biblioteca de serialización de Kotlinx para analizar datos JSON de llamadas de red

Por lo general, usamos la famosa biblioteca GSON , Moshi para analizar los datos JSON provenientes de las llamadas de red/api usando Retrofit . Pero ahora se convierte en la forma antigua para los proyectos de Kotlin, ya que JetBrains (compañía creadora de kotlin) lanzó kotlinx.serialization Kotlin, la primera biblioteca de serialización de datos JSON multiplataforma. kotlinx.serialization está escrito en Kotlin puro y está disponible en todos los objetivos multiplataforma de Kotlin, incluidos Kotlin/Native y Kotlin/JS. Permite serializar/deserializar JSON sin esfuerzo en objetos Kotlin con seguridad de tipos, y viceversa.

Por qué usar la biblioteca de serialización de Kotlin en lugar de Moshi y Gson:

  • Rendimiento de tiempo de ejecución más rápido que Gson y Moshi en modo reflexivo a través de la generación de código.
  • Tiempos de compilación más rápidos que los de Moshi mediante el uso de un complemento de compilación en lugar de un procesador de anotaciones.
  • Mejor compatibilidad con el sistema de tipos de Kotlin en comparación con Gson, incluida la compatibilidad con valores predeterminados y anulables.
  • Compatibilidad con muchos formatos de codificación mediante el uso de módulos de biblioteca independientes.

En este artículo, veremos cómo podemos usarlo en nuestro proyecto para analizar datos JSON provenientes de llamadas de red/api usando la biblioteca Retrofit. 

Adición de la biblioteca de serialización de Kotlin y el convertidor de actualización para la serialización de Kotlin:

Primero, abra build.gradle a nivel de proyecto y agregue el classpath de serialización de Kotlin en el bloque de dependencias:

dependencies {
  // Other classpath declarations
  classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
}

Ahora, abra su build.gradle a nivel de aplicación y aplique el complemento en el bloque de complementos en la parte superior del archivo:

plugins {
    // Other plugins...
    id 'kotlinx-serialization'
}

A continuación, agregue dependencias en el bloque de dependencias:

dependencies {
  // Other dependencies...
  
  // Kotlinx Serialization dependency
  implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.2.2"
  
  // Retrofit kotlin-serialzation-converter
  // It lets Retrofit use the Kotlin Serialization library to convert API requests and responses.
  implementation "com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:0.8.0"
}

Ahora, primero veamos cómo podemos mapear nuestros datos JSON en la clase de datos/pojo de Kotlin usando kotlinx.serialization:

Tomamos un ejemplo del siguiente objeto JSON que convertiremos en la clase de datos/pojo de kotlin.

{
    “course_name”:”Modern Android Development”,
    “course_img”:”https://media.geeksforgeeks.org/wp-content/cdn-uploads/20210215201419/Android-Tutorial.png”,
    “courseMode”:”Online Batch”,
    “courseTracks”:”8 Tracks”
    "is_course_freely_available": true
}

La biblioteca de serialización de Kotlin genera serializadores para clases anotadas con @Serializable. Un serializador es una clase que maneja la serialización y deserialización de un objeto para cada clase anotada con @Serializable. Y la anotación @SerialName le permite especificar un nombre personalizado para su objeto Kotlin. Entonces, si no desea usar el mismo nombre de campo JSON para su objeto Kotlin… use la anotación @SerialName(“actual_json_field_name_here”) para asignar un objeto con un nombre diferente al nombre del campo JSON.

Clase de datos Kotlin o clase POJO:

Kotlin

@Serializable
data class ExampleResponse(
    @SerialName("course_name") 
    val name: String,
    @SerialName("course_img") 
    val courseImage: String,
    // we won't use @SerialName 
    // on those objects
    // whose names will be exactly 
    // same as of json field name.
    val courseMode: String,
    val courseTracks: String,
    @SerialName("is_course_freely_available") 
    val isFree: Boolean,
)

En el código anterior, hemos mapeado datos JSON en la clase de datos Kotlin.

Creación de JSON Converter Factory para actualización

Ahora, dondequiera que construya su instancia de Retrofit, construya así:

Kotlin

//------Creating & adding Retrofit-Kotlinx-Serialization-Converter Factory-------//
     
// Creating kotlinx serialization 
// converter factory for Retrofit
val contentType = "application/json".toMediaType()
val kotlinxConverterFactory = Json.asConverterFactory(contentType)
    
// Adding this converter factory here 
// while building retrofit object.
Retrofit.Builder()
  .addConverterFactory(converterFactory)
  .baseUrl("your_base_url")
  .build()

El código anterior crea el objeto kotlinxConverterFactory como una fábrica de convertidores que usa JSON y lo agrega a la instancia de Retrofit. Para que Retrofit pueda comunicarse con la API a través de objetos JSON. Y eso es todo, de esta manera puede usar fácilmente la biblioteca Kotlinx.Serialization con Retrofit en lugar de GSON y Moshi para analizar datos JSON.

Publicación traducida automáticamente

Artículo escrito por haiderfaizan732 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *