0Pricing
Learn Rust Coding · Lekcja

Własna serializacja

Atrybuty pól

Własna serializacja to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 3 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 Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Dostosowywanie serde

serde zapewnia szczegółową kontrolę nad mapowaniem pól na format za pomocą atrybutów. Możesz zmieniać nazwy pól, pomijać je, ustawiać wartości domyślne i robić znacznie więcej — wszystko za pomocą #[serde(...)].

Zmiana nazwy pola

Użyj rename, aby mapować nazwę pola Rust na inny klucz w danych wyjściowych. Przydaje się to, gdy JSON używa innej konwencji nazewnictwa.

use serde::Serialize;

#[derive(Serialize)]
struct User {
    #[serde(rename = "userName")]
    user_name: String,
}

Zmiana nazw wszystkich pól

Za pomocą rename_all zastosujesz jedną konwencję nazewniczą do wszystkich pól naraz, na przykład przekształcisz snake_case w Rust na camelCase w JSON-ie.

use serde::Serialize;

#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
    first_name: String,
    last_name: String,
}

Pomijanie pól

skip całkowicie pomija pole. skip_serializing_if pomija je warunkowo, na przykład ukrywając puste opcje.

use serde::Serialize;

#[derive(Serialize)]
struct User {
    name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    nickname: Option<String>,
}

Wartości domyślne podczas deserializacji

default dostarcza wartość, gdy pola brakuje w danych wejściowych, dzięki czemu deserializacja nie kończy się błędem.

use serde::Deserialize;

#[derive(Deserialize)]
struct Config {
    #[serde(default)]
    retries: u32,
}

Niestandardowa funkcja wartości domyślnej

Wskaż funkcję w atrybucie default, aby dostarczyć niezerową wartość zastępczą.

use serde::Deserialize;

fn default_port() -> u16 { 8080 }

#[derive(Deserialize)]
struct Config {
    #[serde(default = "default_port")]
    port: u16,
}

Modelowanie zmiany nazwy i wartości domyślnej

Logika atrybutów sprowadza się do mapowania kluczy i wartości zastępczej. Ten uruchamialny przykład odzwierciedla to działanie za pomocą HashMap.

use std::collections::HashMap;

fn main() {
    let mut input: HashMap<&str, &str> = HashMap::new();
    input.insert("userName", "Alice");
    let user_name = input.get("userName").copied().unwrap_or("anon");
    let port = input.get("port").copied().unwrap_or("8080");
    println!("user_name={} port={}", user_name, port);
}

Aliasy podczas deserializacji

alias akceptuje alternatywny klucz podczas odczytu. Przydaje się to przy obsłudze zarówno starych, jak i nowych nazw pól.

use serde::Deserialize;

#[derive(Deserialize)]
struct User {
    #[serde(alias = "username")]
    name: String,
}

Spłaszczanie

flatten umieszcza pola zagnieżdżonej struktury bezpośrednio w obiekcie nadrzędnym, usuwając jeden poziom zagnieżdżenia w JSON-ie.

use serde::Serialize;

#[derive(Serialize)]
struct Meta { page: u32 }

#[derive(Serialize)]
struct Resp {
    data: String,
    #[serde(flatten)]
    meta: Meta,
}

Własna obsługa za pomocą modułu

Aby uzyskać pełną kontrolę, wskaż w with moduł udostępniający funkcje serialize i deserialize, na przykład do formatowania znacznika czasu.

use serde::Serialize;

#[derive(Serialize)]
struct Event {
    #[serde(with = "my_date_format")]
    at: i64,
}

Tagowanie enumów

Za pomocą tag (tagowanie wewnętrzne) lub untagged kontrolujesz sposób kodowania enumów. Określa to strukturę JSON-u dla typów wariantowych.

use serde::Serialize;

#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
    Click { x: i32, y: i32 },
    Key { code: u8 },
}

Szybkie sprawdzenie

Sprawdź, czy rozumiesz niestandardową serializację.

Podsumowanie

Nauczyłeś się dostosowywać serializację:

  • rename i rename_all mapują nazwy pól
  • skip i skip_serializing_if kontrolują dane wyjściowe
  • default i alias ułatwiają deserializację
  • flatten, with oraz enumowe tag obsługują strukturę danych

Następnie: formaty inne niż JSON.

Często zadawane pytania

Czy lekcja „Własna serializacja” jest bezpłatna?

Tak — pełny tekst „Własna serializacja” 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 Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 4 lekcji w sumie.

Co nauczysz się w „Własna serializacja”?

Atrybuty pól Ćwiczysz Learn Rust Coding 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ąć Learn Rust Coding?

Nie wymagamy żadnego doświadczenia. Learn Rust Coding 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 3 z 4.

Ile czasu zajmuje lekcja „Własna serializacja”?

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 Learn Rust Coding?

Tak. Każda lekcja Learn Rust Coding 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. Serializacja i deserializacja
  2. Praca z JSON
  3. Własna serializacja
  4. Inne formaty
← Powrót do Learn Rust Coding