Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

294
Vistas
¿Cómo controlar el diseño de la serialización polimórfica de Kotlinx?

Tengo un json que contiene una lista de objetos polimórficos,

 { "someList": [ { "type": "A", "value": {"aProp": false } }, { "type": "B", "value": {"bProp": "1" } }, ] }

que representa una jerarquía de tipos como esta:

 sealed class Base class A(val aProp: Boolean): Base() class B(val aProp: String): Base() class BaseList(val someList: List<Base>)

Me gustaría deserializar el JSON en tales tipos,

pero el serializador de sellos/kotlinx polimórfico predeterminado lee y escribe el discriminador en el objeto mismo, así:

 { "someList": [ { "type": "A", "aProp": false }, { "type": "B", "bProp": "1" } ] }

mientras que obtuve el discriminador fuera del objeto mismo.

¿Cómo puedo deserializar tal JSON en esta jerarquía de tipo Kotlin?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Si no desea escribir un serializador personalizado, debe hacer coincidir la estructura de su JSON. Su JSON original representa un objeto dentro de un objeto, por lo que tendrá que hacer algo como:

 data class A(val value: AValue): Base() data class AValue(val aProp: Boolean)
over 4 years ago · Santiago Trujillo Denunciar

0

¡Buena pregunta! Me molesta tanto que todavía no haya un estándar para el polimorfismo en JSON.

No creo que escribir un serializador personalizado sea un enfoque deseable aquí. Tendría que aplicar serializadores personalizados en todo el código base. En su lugar, probablemente sea mejor que introduzca un paso de procesamiento previo y posterior cada vez que serialice JSON. Por lo tanto, intercepte el JSON y conviértalo a un formato compatible con kotlinx.serialization .

La serialización de Kotlinx también admite "polimorfismo de matriz" en la configuración JSON, que personalmente prefiero pero es mucho menos común. Almacena el tipo en el primer elemento y el valor en el segundo de una matriz. Esto parece similar en intención a su formato de destino. Con un transformador JSON, debería ser bastante trivial convertir todos los objetos de type y value en una matriz con dos elementos.

Ps. Le sugiero que publique sobre su caso de uso como una solicitud de función en GitHub. Los mantenedores son muy receptivos a la retroalimentación. Parece que algún tipo de patrón de estrategia para lidiar con diferentes formatos de polimorfismo está en orden.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda