1 @file:UseContextualSerialization(ContextualTest.Cont::class) 2 3 package kotlinx.serialization.test 4 5 import kotlinx.serialization.KSerializer 6 import kotlinx.serialization.Serializable 7 import kotlinx.serialization.UseContextualSerialization 8 import kotlinx.serialization.descriptors.PrimitiveKind 9 import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor 10 import kotlinx.serialization.descriptors.SerialDescriptor 11 import kotlinx.serialization.encodeToString 12 import kotlinx.serialization.encoding.Decoder 13 import kotlinx.serialization.encoding.Encoder 14 import kotlinx.serialization.json.Json 15 import kotlinx.serialization.modules.SerializersModule 16 import kotlinx.serialization.modules.contextual 17 18 class ContextualTest { 19 data class Cont(val i: Int) 20 21 @Serializable 22 data class DateHolder(val cont: Cont?) 23 24 object DateSerializer: KSerializer<Cont> { deserializenull25 override fun deserialize(decoder: Decoder): Cont { 26 return Cont(decoder.decodeInt()) 27 } 28 29 override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ContSerializer", PrimitiveKind.INT) 30 serializenull31 override fun serialize(encoder: Encoder, value: Cont) { 32 encoder.encodeInt(value.i) 33 } 34 35 } 36 <lambda>null37 val module = SerializersModule { 38 contextual(DateSerializer) 39 } 40 41 @kotlin.test.Test testnull42 fun test() { 43 val json = Json { serializersModule = module } 44 45 println(json.encodeToString(DateHolder(Cont(42)))) 46 } 47 } 48