Kotlin Academy · Pelajaran

Serializer Kustom

Tangani tipe khusus

Pelajaran 4 dari 413 langkah

Serializer Kustom adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.

Mengapa Memerlukan Serialisator Kustom?

Beberapa tipe tidak memiliki serialisator bawaan: java.util.Date, LocalDate, UUID, atau tipe dari pustaka pihak ketiga.

Serialisator kustom menentukan cara tipe tersebut dipetakan ke dan dari bentuk serial.

Antarmuka KSerializer

Serialisator kustom mengimplementasikan KSerializer<T> dengan tiga anggota: descriptor, serialize, dan deserialize.

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

Serialisator untuk LocalDate

Petakan LocalDate ke dan dari teks ISO. Deskriptor menyatakannya sebagai nilai teks primitif.

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())
}

Menggunakan @Serializable(with = ...)

Terapkan serialisator pada properti tertentu dengan @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 Tingkat Berkas

Agar tidak perlu memberi anotasi pada setiap properti, nyatakan serialisator satu kali untuk setiap berkas dengan @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)

Serialisasi Kontekstual

Daftarkan serialisator secara global dalam modul Json { } dan tandai properti dengan @Contextual. Serialisator ditentukan saat program dijalankan dari modul tersebut.

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

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

Mendaftarkan SerializersModule

Buat modul yang menghubungkan tipe dengan serialisatornya, lalu teruskan modul tersebut ke 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 }

Serialisator Komposit

Untuk tipe dengan banyak bidang, gunakan encodeStructure / decodeStructure dengan deskriptor terstruktur, bukan deskriptor primitif.

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

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

Pola Pengganti

Alternatif yang lebih sederhana: serialisasikan kelas data pengganti privat yang sudah didukung kompiler, lalu petakan ke dan dari tipe asli Anda. Cara ini memerlukan kode tambahan yang lebih sedikit daripada pengodean/pendekodean manual.

import kotlinx.serialization.Serializable

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

Memilih Pendekatan

Pilih pendekatan paling ringan yang sesuai:

  • @Serializable(with=) — satu properti
  • @UseSerializers — seluruh berkas
  • @Contextual + modul — seluruh aplikasi, ditentukan saat program dijalankan
  • Pengganti — tipe komposit dengan kode minimal

Deskriptor Primitif vs Terstruktur

Deskriptor harus sesuai dengan cara Anda melakukan pengodean:

  • Satu nilai (teks/bilangan bulat) → PrimitiveSerialDescriptor
  • Beberapa bidang → buildClassSerialDescriptor

Ketidaksesuaian menyebabkan galat serialisasi saat program dijalankan.

Pemeriksaan Singkat

Anda ingin menserialisasi satu LocalDate sebagai satu teks ISO. Deskriptor mana yang sesuai?

Ringkasan

Serialisator kustom menangani tipe yang tidak dikenal oleh pengaya:

  • Implementasikan KSerializer<T> dengan deskriptor + serialisasi + deserialisasi
  • Terapkan melalui @Serializable(with=), @UseSerializers, atau @Contextual + modul
  • Sesuaikan jenis deskriptor dengan pengodean Anda

Dengan demikian, kursus Serialisasi ini selesai.

Gratis untuk memulai

Belajar Kotlin dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
51
Pelajaran
203

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Serializer Kustom” gratis?

Ya — teks lengkap “Serializer Kustom” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Serializer Kustom”?

Tangani tipe khusus Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Kotlin Academy?

Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Serializer Kustom” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?

Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Penyiapan kotlinx.serialization
  2. Kelas yang Dapat Diserialisasi
  3. Pengodean dan Penguraian JSON
  4. Serializer Kustom
← Kembali ke Kotlin Academy