Özel Serileştiriciler
Özel türleri işleyin
Özel Serileştiriciler, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Neden Özel Serileştiriciler?
Bazı türlerin yerleşik serileştiricisi yoktur: java.util.Date, LocalDate, UUID veya üçüncü taraf kütüphanelerindeki türler.
Özel bir serileştirici, böyle bir türün serileştirilmiş bir biçime nasıl dönüştürüleceğini ve bu biçimden nasıl geri alınacağını tanımlar.
KSerializer Arayüzü
Özel bir serileştirici, KSerializer<T> arayüzünü descriptor, serialize ve deserialize olmak üzere üç üyeyle uygular.
import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.EncoderLocalDate için Serileştirici
Bir LocalDate değerini ISO dizesine ve bu dizeden geri eşleyin. Tanımlayıcı, bunun ilkel bir dize olduğunu belirtir.
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())
}@Serializable(with = ...) Kullanımı
Serileştiriciyi belirli bir özelliğe @Serializable(with = ...) ile uygulayın.
import java.time.LocalDate
import kotlinx.serialization.Serializable
@Serializable
data class Event(
val name: String,
@Serializable(with = LocalDateSerializer::class)
val date: LocalDate
)Dosya Düzeyinde @UseSerializers
Her özelliğe ek açıklama eklemekten kaçınmak için serileştiricileri dosya başına bir kez @file:UseSerializers ile tanımlayın.
@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)Bağlamsal Serileştirme
Serileştiricileri Json { } modülüne genel olarak kaydedin ve özellikleri @Contextual ile işaretleyin. Serileştirici, çalışma zamanında modülden çözümlenir.
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
import java.time.LocalDate
@Serializable
data class Event(val name: String, @Contextual val date: LocalDate)SerializersModule Kaydetme
Türü kendi serileştiricisine bağlayan bir modül oluşturun ve bunu Json nesnesine aktarın.
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 }Birleşik Serileştiriciler
Birden fazla alan içeren türler için ilkel bir tanımlayıcı yerine yapılandırılmış bir tanımlayıcıyla encodeStructure / decodeStructure kullanın.
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
import kotlinx.serialization.descriptors.element
val descriptor = buildClassSerialDescriptor("Color") {
element<Int>("r")
element<Int>("g")
element<Int>("b")
}Ara Temsilci Deseni
Daha basit bir seçenek olarak, derleyicinin zaten desteklediği özel bir ara temsilci veri sınıfını serileştirin, ardından gerçek türünüze ve gerçek türünüzden eşleme yapın. Bu, elle kodlama ve kod çözmeye göre daha az kalıp kod gerektirir.
import kotlinx.serialization.Serializable
@Serializable
private data class ColorSurrogate(val r: Int, val g: Int, val b: Int)Yaklaşım Seçme
İhtiyacınızı karşılayan en yalın yaklaşımı seçin:
- @Serializable(with=) — tek özellik
- @UseSerializers — dosyanın tamamı
- @Contextual + module — uygulama genelinde, çalışma zamanında çözümlenir
- Ara temsilci — en az kodla birleşik türler
İlkel ve Yapılandırılmış Tanımlayıcı
Tanımlayıcı, kodlama biçiminizle eşleşmelidir:
- Tek değer (dize/tamsayı) →
PrimitiveSerialDescriptor - Birden fazla alan →
buildClassSerialDescriptor
Uyumsuzluk, çalışma zamanında serileştirme hatalarına yol açar.
Hızlı Kontrol
Tek bir LocalDate değerini tek bir ISO dizesi olarak serileştirmek istiyorsunuz. Hangi tanımlayıcı uygundur?
Özet
Özel serileştiriciler, eklentinin tanımadığı türleri işler:
KSerializer<T>arayüzünü tanımlayıcı, serileştirme ve seriden çıkarma üyeleriyle uygulayın@Serializable(with=),@UseSerializersveya@Contextual+ modül aracılığıyla uygulayın- Tanımlayıcı türünü kodlama biçiminizle eşleştirin
Bu, Serileştirme kursunu tamamlar.
Sıkça Sorulan Sorular
“Özel Serileştiriciler” dersi ücretsiz mi?
Evet — “Özel Serileştiriciler” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“Özel Serileştiriciler” dersinde ne öğreneceğim?
Özel türleri işleyin Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Özel Serileştiriciler” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- kotlinx.serialization Kurulumu
- Serileştirilebilir Sınıflar
- JSON Kodlama ve Kod Çözme
- Özel Serileştiriciler