That's correct, thanks for pointing that out. The limitation I mention applies to kotlinx.serialization only which doesn't support interfaces atm (I opened a ticket with them: I guess it's only a con for Ktorm if you want to use kotlinx.serialization but using Ktor it's the likely candidate. As mentioned in part 3 of my series, I still stick with Gson because it's the one library that just works without unexpected surprises and since serialization/deserialization performance is rarely an important factor in a distributed environment, this seems fine to me.