0Pricing
Kotlin Academy · Aula

Serializadores Personalizados

Trate tipos especiais

Serializadores Personalizados é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

Por que usar serializadores personalizados?

Alguns tipos não têm um serializador integrado: java.util.Date, LocalDate, UUID ou tipos de bibliotecas de terceiros.

Um serializador personalizado define como esse tipo é convertido de e para um formato serializado.

A interface KSerializer

Um serializador personalizado implementa KSerializer<T> com três membros: descriptor, serialize e deserialize.

import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder

Um serializador para LocalDate

Converta um LocalDate em uma cadeia ISO e vice-versa. O descritor o declara como uma cadeia primitiva.

import java.time.LocalDate
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder

object LocalDateSerializer : KSerializer<LocalDate> {
    override val descriptor: SerialDescriptor =
        PrimitiveSerialDescriptor("LocalDate", PrimitiveKind.STRING)
    override fun serialize(encoder: Encoder, value: LocalDate) =
        encoder.encodeString(value.toString())
    override fun deserialize(decoder: Decoder): LocalDate =
        LocalDate.parse(decoder.decodeString())
}

Usando @Serializable(with = ...)

Aplique o serializador a uma propriedade específica com @Serializable(with = ...).

import java.time.LocalDate
import kotlinx.serialization.Serializable

@Serializable
data class Event(
    val name: String,
    @Serializable(with = LocalDateSerializer::class)
    val date: LocalDate
)

@UseSerializers no nível do arquivo

Para evitar anotar cada propriedade, declare os serializadores uma vez por arquivo com @file:UseSerializers.

@file:UseSerializers(LocalDateSerializer::class)

import kotlinx.serialization.UseSerializers
import java.time.LocalDate
import kotlinx.serialization.Serializable

@Serializable
data class Event(val name: String, val date: LocalDate)

Serialização contextual

Registre serializadores globalmente no módulo Json { } e marque as propriedades com @Contextual. O serializador é resolvido em tempo de execução a partir do módulo.

import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import java.time.LocalDate

@Serializable
data class Event(val name: String, @Contextual val date: LocalDate)

Registrando um SerializersModule

Crie um módulo que associe o tipo ao seu serializador e passe-o para Json.

import kotlinx.serialization.json.Json
import kotlinx.serialization.modules.SerializersModule
import java.time.LocalDate

val module = SerializersModule {
    contextual(LocalDate::class, LocalDateSerializer)
}
val json = Json { serializersModule = module }

Serializadores compostos

Para tipos com vários campos, use encodeStructure / decodeStructure com um descritor estruturado em vez de um descritor primitivo.

import kotlinx.serialization.descriptors.buildClassSerialDescriptor
import kotlinx.serialization.descriptors.element

val descriptor = buildClassSerialDescriptor("Color") {
    element<Int>("r")
    element<Int>("g")
    element<Int>("b")
}

Padrão de tipo substituto

Uma alternativa mais simples é serializar uma classe de dados substituta privada que o compilador já reconhece e, em seguida, convertê-la de e para o seu tipo real. Isso exige menos código repetitivo do que a codificação e a decodificação manuais.

import kotlinx.serialization.Serializable

@Serializable
private data class ColorSurrogate(val r: Int, val g: Int, val b: Int)

Escolhendo uma abordagem

Escolha a abordagem mais simples que atenda às suas necessidades:

  • @Serializable(with=) — uma propriedade
  • @UseSerializers — o arquivo inteiro
  • @Contextual + módulo — em todo o aplicativo, resolvido em tempo de execução
  • Tipo substituto — tipos compostos com o mínimo de código

Descritor primitivo vs. estruturado

O descritor deve corresponder à forma como você codifica:

  • Valor único (cadeia/inteiro) → PrimitiveSerialDescriptor
  • Vários campos → buildClassSerialDescriptor

Uma incompatibilidade causa erros de serialização em tempo de execução.

Verificação rápida

Você quer serializar um único LocalDate como uma única cadeia ISO. Qual descritor é apropriado?

Recapitulação

Os serializadores personalizados lidam com tipos que o plug-in não reconhece:

  • Implemente KSerializer<T> com descritor + serialização + desserialização
  • Aplique por meio de @Serializable(with=), @UseSerializers ou @Contextual + módulo
  • Associe o tipo do descritor à sua codificação

Isso conclui o curso de Serialização.

Perguntas Frequentes

A aula “Serializadores Personalizados” é grátis?

Sim — o texto completo de “Serializadores Personalizados” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “Serializadores Personalizados”?

Trate tipos especiais Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Serializadores Personalizados”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Configuração de kotlinx.serialization
  2. Classes Serializáveis
  3. Codificação e Decodificação de JSON
  4. Serializadores Personalizados
← Voltar para Kotlin Academy