Created
December 23, 2019 15:47
-
-
Save smallufo/85632e827432a03e2da3f7d858d39460 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
interface IRunnable { | |
fun run() | |
} | |
class Horse : IRunnable { | |
override fun run() { | |
println("horse running") | |
} | |
} | |
class Dog : IRunnable { | |
override fun run() { | |
println("dog running") | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class RunnableTest { | |
private val logger = KotlinLogging.logger { } | |
@Serializer(forClass = Horse::class) | |
object HorseSerializer {} | |
@Serializer(forClass = Dog::class) | |
object DogSerializer {} | |
@ImplicitReflectionSerializer | |
@Test | |
fun testJson() { | |
val runnableModule = SerializersModule { | |
polymorphic(IRunnable::class) { | |
Horse::class with HorseSerializer | |
Dog::class with DogSerializer | |
} | |
} | |
Json(context = runnableModule).stringify(Horse::class.serializer(), Horse()).also { | |
logger.info("json = {}", it) | |
} | |
} | |
} | |
/** | |
kotlinx.serialization.SerializationException: Can't locate argument-less serializer for class Horse. For generic classes, such as lists, please provide serializer explicitly. | |
at kotlinx.serialization.PlatformUtilsKt.serializer(PlatformUtils.kt:12) | |
at RunnableTest.testJson(RunnableTest.kt:30) | |
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) | |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | |
at java.lang.reflect.Method.invoke(Method.java:498) | |
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) | |
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) | |
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) | |
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) | |
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) | |
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) | |
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) | |
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) | |
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) | |
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) | |
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) | |
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) | |
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) | |
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) | |
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) | |
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) | |
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) | |
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) | |
**/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class RunnableTest2 { | |
private val logger = KotlinLogging.logger { } | |
@Serializer(forClass = Horse::class) | |
object HorseSerializer {} | |
@Serializer(forClass = Dog::class) | |
object DogSerializer {} | |
@ImplicitReflectionSerializer | |
@Test | |
fun testJson() { | |
val runnableModule = SerializersModule { | |
polymorphic(IRunnable::class) { | |
Horse::class with HorseSerializer | |
Dog::class with DogSerializer | |
} | |
} | |
Json(context = runnableModule).stringify(IRunnable::class.serializer(), Horse()).also { | |
logger.info("json = {}", it) | |
} | |
} | |
} | |
/** | |
kotlinx.serialization.SerializationException: Can't locate argument-less serializer for class IRunnable. For generic classes, such as lists, please provide serializer explicitly. | |
at kotlinx.serialization.PlatformUtilsKt.serializer(PlatformUtils.kt:12) | |
at RunnableTest.testJson(RunnableTest.kt:30) | |
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) | |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) | |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) | |
at java.lang.reflect.Method.invoke(Method.java:498) | |
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) | |
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) | |
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) | |
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) | |
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) | |
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) | |
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) | |
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) | |
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) | |
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) | |
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) | |
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) | |
at org.junit.runners.ParentRunner.run(ParentRunner.java:363) | |
at org.junit.runner.JUnitCore.run(JUnitCore.java:137) | |
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68) | |
at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33) | |
at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:230) | |
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58) | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment