Skip to content

Instantly share code, notes, and snippets.

@smallufo
Created December 23, 2019 15:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smallufo/c47e641cae24252b610e5d581b6cff78 to your computer and use it in GitHub Desktop.
Save smallufo/c47e641cae24252b610e5d581b6cff78 to your computer and use it in GitHub Desktop.
interface IRunnable {
fun run()
}
class Horse : IRunnable {
override fun run() {
println("horse running")
}
}
class Dog : IRunnable {
override fun run() {
println("dog running")
}
}
@Serializer(forClass = Horse::class)
object HorseSerializer {}
@Serializer(forClass = Dog::class)
object DogSerializer {}
@Serializable
data class Zoo(val runnable : IRunnable)
class RunnableTest {
private val logger = KotlinLogging.logger { }
@Test
fun testJson() {
val runnableModule = SerializersModule {
polymorphic(IRunnable::class) {
Horse::class with HorseSerializer
Dog::class with DogSerializer
}
}
val zoo = Zoo(Dog())
Json(context = runnableModule).stringify(Zoo.serializer() , zoo).also {
logger.info("zoo = {}" , it)
}
}
}
// 23:56:42.407 [main] INFO RunnableTest - zoo = {"runnable":{"type":"Dog"}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment