Serializer Kustom
Tangani tipe khusus
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.EncoderSerialisator 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.
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
- Penyiapan kotlinx.serialization
- Kelas yang Dapat Diserialisasi
- Pengodean dan Penguraian JSON
- Serializer Kustom