Antoine Gagnon
11/03/2020, 6:05 PManimalType
field isn’t serialized in my code:
@Serializable
abstract class Animal{
abstract val name : String
abstract val animalType : String
}
@Serializable
class Dog(override val name:String):Animal(){
override val animalType: String = "Dog"
}
val rex = Dog("Rex")
val string = Json.encodeToString(Dog.serializer(),rex)
println(string)
The string
value at the end is always {"name":"Rex"}
and doesn’t include the animalType
fieldTomasz Krakowiak
11/03/2020, 6:08 PMAntoine Gagnon
11/03/2020, 6:11 PMAnimal
since it’ll be a different discriminator that the default oneIgor Brishkoski
11/03/2020, 6:16 PMval rex = Dog("")
to val rex: Animal = Dog("")
Igor Brishkoski
11/03/2020, 6:18 PMDog.serializer
just Json.encodeToString(rex)
Tomasz Krakowiak
11/03/2020, 6:31 PM@OptIn(ExperimentalSerializationApi::class)
public class AnimalSerializer<T : Any> : AbstractPolymorphicSerializer<T>() {
public override val descriptor: SerialDescriptor =
buildSerialDescriptor("kotlinx.serialization.Polymorphic", PolymorphicKind.OPEN) {
element("animalType", String.serializer().descriptor)
element(
"value",
buildSerialDescriptor("kotlinx.serialization.Polymorphic<${Animal::class.simpleName}>", SerialKind.CONTEXTUAL)
)
}.withContext(Animal::class)
override fun toString(): String {
return "kotlinx.serialization.AnimalSerializer"
}
}
Igor Brishkoski
11/03/2020, 6:32 PMaleksey.tomin
11/04/2020, 6:38 AM@Required
to animalType
field.
Without this marker serialization
doesn’t write into json field with default value.Antoine Gagnon
11/04/2020, 2:42 PM