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