Kotlin multiplatform reflectionless serialization library core API and infrastructure
—
The core serialization API provides fundamental interfaces, annotations, and utility functions that form the foundation of the kotlinx-serialization framework.
The main serializer interface that combines serialization and deserialization capabilities.
interface KSerializer<T> : SerializationStrategy<T>, DeserializationStrategy<T> {
override val descriptor: SerialDescriptor
}Defines the contract for encoding objects to serialized form.
interface SerializationStrategy<in T> {
val descriptor: SerialDescriptor
fun serialize(encoder: Encoder, value: T)
}Defines the contract for decoding objects from serialized form.
interface DeserializationStrategy<T> {
val descriptor: SerialDescriptor
fun deserialize(decoder: Decoder): T
}Base interface for all serialization formats.
interface SerialFormat {
val serializersModule: SerializersModule
}Format that serializes to and from strings.
interface StringFormat : SerialFormat {
fun <T> encodeToString(serializer: SerializationStrategy<T>, value: T): String
fun <T> decodeFromString(deserializer: DeserializationStrategy<T>, string: String): T
}Extension Functions:
inline fun <reified T> StringFormat.encodeToString(value: T): String
inline fun <reified T> StringFormat.decodeFromString(string: String): TFormat that serializes to and from byte arrays.
interface BinaryFormat : SerialFormat {
fun <T> encodeToByteArray(serializer: SerializationStrategy<T>, value: T): ByteArray
fun <T> decodeFromByteArray(deserializer: DeserializationStrategy<T>, bytes: ByteArray): T
}Extension Functions:
inline fun <reified T> BinaryFormat.encodeToByteArray(value: T): ByteArray
inline fun <reified T> BinaryFormat.decodeFromByteArray(bytes: ByteArray): T
// Hex encoding utilities
fun <T> BinaryFormat.encodeToHexString(
serializer: SerializationStrategy<T>,
value: T,
lowerCase: Boolean = false
): String
fun <T> BinaryFormat.decodeFromHexString(
deserializer: DeserializationStrategy<T>,
hex: String
): T
inline fun <reified T> BinaryFormat.encodeToHexString(
value: T,
lowerCase: Boolean = false
): String
inline fun <reified T> BinaryFormat.decodeFromHexString(hex: String): TMarks classes for automatic serialization code generation.
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
annotation class Serializable(val with: KClass<out KSerializer<*>> = KSerializer::class)Usage:
@Serializable
data class User(val name: String, val email: String)
// Custom serializer
@Serializable(with = UserSerializer::class)
data class CustomUser(val id: Long, val data: String)Overrides the default property or class name in serialized form.
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS)
annotation class SerialName(val value: String)Usage:
@Serializable
@SerialName("person")
data class User(
@SerialName("full_name")
val name: String,
val email: String
)Excludes properties from serialization.
@Target(AnnotationTarget.PROPERTY)
annotation class TransientUsage:
@Serializable
data class User(
val name: String,
@Transient
val password: String = ""
)Marks optional properties as required in input during deserialization.
@Target(AnnotationTarget.PROPERTY)
annotation class RequiredControls when default values are encoded.
@ExperimentalSerializationApi
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS)
annotation class EncodeDefault(val mode: Mode = Mode.ALWAYS) {
enum class Mode {
ALWAYS,
NEVER
}
}@Target(AnnotationTarget.PROPERTY, AnnotationTarget.TYPE)
annotation class Contextual
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.TYPE)
annotation class Polymorphic
@ExperimentalSerializationApi
@Target(AnnotationTarget.ANNOTATION_CLASS)
annotation class InheritableSerialInfo
@ExperimentalSerializationApi
@Target(AnnotationTarget.ANNOTATION_CLASS)
annotation class MetaSerializable
@ExperimentalSerializationApi
@Target(AnnotationTarget.CLASS)
annotation class Serializer(val forClass: KClass<*> = KClass::class)
@Target(AnnotationTarget.FILE)
annotation class UseContextualSerialization(vararg val forClasses: KClass<*>)
@Target(AnnotationTarget.FILE)
annotation class UseSerializers(vararg val serializerClasses: KClass<out KSerializer<*>>)
@ExperimentalSerializationApi
@Target(AnnotationTarget.CLASS)
annotation class KeepGeneratedSerializer
@ExperimentalSerializationApi
@Target(AnnotationTarget.ANNOTATION_CLASS)
annotation class SerialInfo// Get serializer for reified type
inline fun <reified T> serializer(): KSerializer<T>
// Get serializer for KType
fun serializer(type: KType): KSerializer<Any>Usage:
val stringSerializer = serializer<String>()
val listSerializer = serializer<List<Int>>()
val customSerializer = serializer<MyClass>()Base exception for all serialization-related errors.
open class SerializationException(
message: String,
cause: Throwable? = null
) : IllegalArgumentException(message, cause)Indicates that a required field is missing during deserialization.
@ExperimentalSerializationApi
class MissingFieldException(
val missingFields: List<String>,
message: String,
cause: Throwable? = null
) : SerializationException(message, cause)Delegates serialization to a contextual serializer from the SerializersModule.
@ExperimentalSerializationApi
class ContextualSerializer<T : Any>(
val serializableClass: KClass<T>,
val fallbackSerializer: KSerializer<T>? = null,
val typeArgumentsSerializers: Array<KSerializer<*>>
) : KSerializer<T>@ExperimentalSerializationApi
sealed class AbstractPolymorphicSerializer<T : Any> : KSerializer<T>
class PolymorphicSerializer<T : Any>(
val baseClass: KClass<T>
) : AbstractPolymorphicSerializer<T>()
@ExperimentalSerializationApi
class SealedClassSerializer<T : Any>(
val serialName: String,
val baseClass: KClass<T>,
val subclasses: Array<KClass<out T>>,
val subSerializers: Array<KSerializer<out T>>
) : AbstractPolymorphicSerializer<T>()@RequiresOptIn(level = RequiresOptIn.Level.WARNING)
annotation class ExperimentalSerializationApi
@RequiresOptIn(level = RequiresOptIn.Level.ERROR)
annotation class InternalSerializationApiThese annotations mark APIs that are either experimental or internal and not intended for public use.
Install with Tessl CLI
npx tessl i tessl/maven-org-jetbrains-kotlinx--kotlinx-serialization-core