es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Usar @SerializedName con un guión no funciona

Estoy intentando deserializar esta respuesta JSON en un objeto y una de mis claves tiene un guion en ella. Desafortunadamente, Kotlin no admite guiones en los nombres de las variables, por lo que utilicé @SerializedName() pero aún así no está funcionando.
¿Algún indicio de por qué?

Respuesta JSON

[
    {
        "dateCreated": "07-22-2021",
        "comments": "Comentario",
        "vehicle_type": "Sedan",
        "name": "Plantilla Nissan Legacy",
        "template-type": "", //esto me está dando el problema
        "template_uses_type": "Ambos"
        ...
    }
]

Mi objeto:

@Serializable
data class SpinDataResponse(
    val dateCreated: String,
    val comments: String,
    val vehicle_type: String,
    val name: String,
    @SerializedName("template-type") val template_type: String,
    val template_uses_type: String,
    ...
)

Error:

> I/System.out: Error: Token JSON inesperado en el desplazamiento 120: Se encontró una clave desconocida 'template-type'.
>     Use 'ignoreUnknownKeys = true' en el constructor 'Json {}' para ignorar las claves desconocidas.
>     Entrada JSON: ....."name": "Nissan PathFinder", "template-type": "", "template_.....

No quiero ignorar la clave desconocida porque realmente la necesito.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema podría estar relacionado con la forma en que estás usando la anotación @SerializedName(). En lugar de usar @SerializedName(“template-type”), intenta usar @SerialName(“template-type”) de la biblioteca kotlinx.serialization.

    Importa kotlinx.serialization.SerialName y reemplaza la anotación @SerializedName() con @SerialName(“template-type”). Esto debería solucionar el problema.

    Tu código actualizado debería lucir así:

    import kotlinx.serialization.SerialName
    import kotlinx.serialization.Serializable
    
    @Serializable
    data class SpinDataResponse(
        val dateCreated:String,
        val comments: String,
        val vehicle_type:String,
        val name:String,
        @SerialName("template-type") val template_type:String,
        val template_uses_type:String,
        ...
    )
    

    Nota: Asegúrate de incluir la biblioteca kotlinx.serialization en tu proyecto.

Comments are closed.