Kotlin multiplatform reflectionless serialization library core API and infrastructure
npx @tessl/cli install tessl/maven-org-jetbrains-kotlinx--kotlinx-serialization-core@1.9.0Kotlin multiplatform reflectionless serialization library providing format-agnostic serialization for classes marked with @Serializable. The core module contains fundamental serialization infrastructure supporting multiple target platforms including JVM, JavaScript, and Native targets.
Note: Some APIs are marked with @ExperimentalSerializationApi and may change in future versions. Stable APIs form the foundation for production use, while experimental APIs provide access to advanced features.
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.9.0")
}import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.modules.*
import kotlinx.serialization.builtins.*import kotlinx.serialization.*
import kotlinx.serialization.json.*
@Serializable
data class User(val name: String, val email: String)
fun main() {
val user = User("John Doe", "john@example.com")
// Serialization to JSON (requires kotlinx-serialization-json)
val json = Json.encodeToString(user)
println(json) // {"name":"John Doe","email":"john@example.com"}
// Deserialization from JSON
val deserializedUser = Json.decodeFromString<User>(json)
println(deserializedUser) // User(name=John Doe, email=john@example.com)
}The library uses a plugin-based architecture:
@Serializable classes at compile timeEncoder/Decoder interfacesFundamental serialization interfaces and annotations for marking classes and controlling serialization behavior.
// Main serializer interface
interface KSerializer<T> : SerializationStrategy<T>, DeserializationStrategy<T> {
override val descriptor: SerialDescriptor
}
// Core annotations
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
annotation class Serializable(val with: KClass<out KSerializer<*>> = KSerializer::class)
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS)
annotation class SerialName(val value: String)Type descriptor system providing structural metadata and introspection capabilities for serializable types.
interface SerialDescriptor {
val serialName: String
val kind: SerialKind
val elementsCount: Int
fun getElementName(index: Int): String
fun getElementDescriptor(index: Int): SerialDescriptor
}
fun buildClassSerialDescriptor(
serialName: String,
vararg typeParameters: SerialDescriptor,
builderAction: ClassSerialDescriptorBuilder.() -> Unit = {}
): SerialDescriptorFormat-agnostic encoding and decoding interfaces that form the foundation for all serialization formats.
interface Encoder {
val serializersModule: SerializersModule
fun encodeBoolean(value: Boolean)
fun encodeString(value: String)
fun beginStructure(descriptor: SerialDescriptor): CompositeEncoder
}
interface Decoder {
val serializersModule: SerializersModule
fun decodeBoolean(): Boolean
fun decodeString(): String
fun beginStructure(descriptor: SerialDescriptor): CompositeDecoder
}Runtime system for contextual and polymorphic serializer resolution, enabling flexible serialization strategies.
class SerializersModule {
fun getContextual(kClass: KClass<*>): KSerializer<*>?
fun getPolymorphic(baseClass: KClass<out Any>, value: Any): SerializationStrategy<Any>?
}
fun SerializersModule(builderAction: SerializersModuleBuilder.() -> Unit): SerializersModuleComprehensive collection of serializers for Kotlin standard library types including primitives, collections, and special types.
// Primitive serializers
fun Boolean.Companion.serializer(): KSerializer<Boolean>
fun String.Companion.serializer(): KSerializer<String>
// Collection serializers
fun <T> ListSerializer(elementSerializer: KSerializer<T>): KSerializer<List<T>>
fun <K, V> MapSerializer(
keySerializer: KSerializer<K>,
valueSerializer: KSerializer<V>
): KSerializer<Map<K, V>>// Core serialization exception
open class SerializationException(message: String, cause: Throwable? = null) : IllegalArgumentException(message, cause)
// Missing field exception for required properties
class MissingFieldException(
val missingFields: List<String>,
message: String,
cause: Throwable? = null
) : SerializationException(message, cause)
// Serial kinds for descriptor system
sealed class SerialKind {
object ENUM : SerialKind()
object CONTEXTUAL : SerialKind()
}
sealed class PrimitiveKind : SerialKind() {
object BOOLEAN : PrimitiveKind()
object STRING : PrimitiveKind()
object INT : PrimitiveKind()
// ... other primitive kinds
}
sealed class StructureKind : SerialKind() {
object CLASS : StructureKind()
object LIST : StructureKind()
object MAP : StructureKind()
object OBJECT : StructureKind()
}