orangy
class KClassSerializer<T : Any>(val kClass: KClass<T>) : JsonSerializer<T> {
override fun serialize(src: T, typeOfSrc: Type, context: JsonSerializationContext) =
JsonObject().apply {
kClass.declaredMemberProperties.forEach { addProperty(it.name, it.get(src).toString()) }
}
}
inline fun <reified T : Any> GsonBuilder.registerKotlinTypeAdapter() = apply {
registerTypeHierarchyAdapter(T::class.java, KClassSerializer<T>(T::class))
}