Kotlin Academy · Lekcja

Klasy serializowalne

Dodawaj adnotacje do modeli

Lekcja 2 z 413 kroki

Klasy serializowalne to bezpłatna lekcja Kotlin Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Kotlin Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Adnotacja @Serializable

Aby klasa mogła być serializowana, należy opatrzyć ją adnotacją @Serializable. Wtyczka kompilatora wygeneruje następnie dla niej serializator.

import kotlinx.serialization.Serializable

@Serializable
data class User(val id: Int, val name: String)

Działa z klasami danych

Adnotację można zastosować do dowolnej klasy, ale klasy danych są najczęściej wybierane jako modele, ponieważ automatycznie generują metody equals, hashCode i toString.

Wszystkie właściwości konstruktora stają się serializowanymi polami.

Wartości domyślne

Właściwości z wartościami domyślnymi stają się opcjonalne podczas dekodowania. Jeśli JSON ich nie zawiera, zostanie użyta wartość domyślna.

@Serializable
data class Config(
    val host: String,
    val port: Int = 8080,
    val secure: Boolean = false
)

Właściwości dopuszczające null

Typy dopuszczające null są mapowane na wartość JSON null. Właściwość dopuszczająca null bez wartości domyślnej nadal jest wymagana w JSON (ale jej wartością może być null).

@Serializable
data class Profile(
    val name: String,
    val bio: String? = null
)

Zmiana nazw pól za pomocą @SerialName

Nazwy pól JSON często różnią się od konwencji nazewniczych Kotlin. Do ich mapowania należy użyć @SerialName.

import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

@Serializable
data class Account(
    @SerialName("user_id") val userId: Int,
    @SerialName("full_name") val fullName: String
)

Pomijanie właściwości za pomocą @Transient

Aby wykluczyć właściwość z serializacji, należy oznaczyć ją adnotacją @Transient. Właściwości przejściowe muszą mieć wartość domyślną.

import kotlinx.serialization.Transient
import kotlinx.serialization.Serializable

@Serializable
data class Session(
    val token: String,
    @Transient val cachedAt: Long = 0L
)

Zagnieżdżone klasy serializowalne

Klasy serializowalne mogą zawierać inne klasy serializowalne. Wtyczka automatycznie obsługuje cały graf.

@Serializable
data class Address(val city: String, val zip: String)

@Serializable
data class Company(val name: String, val address: Address)

Kolekcje w modelach

Standardowe kolekcje, takie jak List, Set i Map, są serializowalne od razu, jeśli ich elementy są serializowalne.

@Serializable
data class Team(
    val name: String,
    val members: List<String>,
    val scores: Map<String, Int>
)

Obsługa typów wyliczeniowych

Klasy wyliczeniowe można opatrzyć adnotacją @Serializable; domyślnie są serializowane do swoich nazw. Za pomocą @SerialName zastosowanej do elementów można je dostosować.

@Serializable
enum class Role {
    @SerialName("admin") ADMIN,
    @SerialName("user") USER
}

Podsumowanie: wymagane a opcjonalne

Właściwość jest wymagana w JSON, chyba że ma wartość domyślną. Najważniejsze zasady:

  • Brak wartości domyślnej → właściwość wymagana
  • Wartość domyślna → właściwość opcjonalna
  • @Transient → właściwość pomijana, musi mieć wartość domyślną
  • Właściwość dopuszczająca null bez wartości domyślnej → wymagana, ale może mieć wartość null

Czego nie można bezpośrednio serializować

Typy bez wbudowanego serializatora (np. java.util.Date, java.time.Instant, UUID) wymagają własnego serializatora, który zostanie omówiony później.

Próba serializacji takich typów bez własnego serializatora powoduje błąd kompilacji.

Szybkie sprawdzenie

Które stwierdzenie dotyczące @Transient jest prawdziwe?

Podsumowanie

W modelach poznali Państwo następujące adnotacje:

  • @Serializable na klasie
  • Wartości domyślne sprawiają, że pola są opcjonalne
  • @SerialName zmienia nazwy kluczy JSON
  • @Transient wyklucza pole (wymaga wartości domyślnej)

Następny temat: kodowanie i dekodowanie JSON.

Bezpłatny start

Ucz się Kotlin dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
51
Lekcje
203

Często zadawane pytania

Czy lekcja „Klasy serializowalne” jest bezpłatna?

Tak — pełny tekst „Klasy serializowalne” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Kotlin Academy, przejdź na CoddyKit PRO. Kurs Kotlin Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Klasy serializowalne”?

Dodawaj adnotacje do modeli Ćwiczysz Kotlin Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Kotlin Academy?

Nie wymagamy żadnego doświadczenia. Kotlin Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Klasy serializowalne”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Kotlin Academy?

Tak. Każda lekcja Kotlin Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja kotlinx.serialization
  2. Klasy serializowalne
  3. Kodowanie i dekodowanie JSON
  4. Niestandardowe serializery
← Powrót do Kotlin Academy