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ę:
renameirename_allmapują nazwy pólskipiskip_serializing_ifkontrolują dane wyjściowedefaultialiasułatwiają deserializacjęflatten,withoraz enumowetagobsł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
- Serializacja i deserializacja
- Praca z JSON
- Własna serializacja
- Inne formaty