Egendefinert serialisering
Feltattributter
Egendefinert serialisering er en gratis leksjon i Lær Rust-programmering på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lær Rust-programmering, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lær Rust-programmering inneholder totalt 4 leksjoner.
Tilpasse serde
serde gir detaljert kontroll over hvordan felt kobles til et format ved hjelp av attributter. De kan gi felt nye navn, hoppe over dem, angi standardverdier og mer, alt via #[serde(...)].
Gi et felt nytt navn
Bruk rename for å koble et Rust-feltnavn til en annen nøkkel i resultatet. Dette er nyttig når JSON bruker en annen navnekonvensjon.
use serde::Serialize;
#[derive(Serialize)]
struct User {
#[serde(rename = "userName")]
user_name: String,
}Gi alle felt nye navn
Bruk rename_all for å angi en navnekonvensjon for alle felt samtidig, for eksempel fra Rusts snake_case til JSONs camelCase.
use serde::Serialize;
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
first_name: String,
last_name: String,
}Hoppe over felt
skip utelater et felt fullstendig. skip_serializing_if utelater det betinget, for eksempel for å skjule tomme alternativer.
use serde::Serialize;
#[derive(Serialize)]
struct User {
name: String,
#[serde(skip_serializing_if = "Option::is_none")]
nickname: Option<String>,
}Standardverdier ved deserialisering
default angir en verdi når et felt mangler i inndataene, slik at deserialiseringen ikke mislykkes.
use serde::Deserialize;
#[derive(Deserialize)]
struct Config {
#[serde(default)]
retries: u32,
}Egendefinert standardfunksjon
La default peke på en funksjon for å angi en reserveverdi som ikke er null eller tom.
use serde::Deserialize;
fn default_port() -> u16 { 8080 }
#[derive(Deserialize)]
struct Config {
#[serde(default = "default_port")]
port: u16,
}Modellere rename + default
Attributtlogikken består ganske enkelt av nøkkeltilordning pluss en reserveverdi. Dette kjørbare eksempelet gjenspeiler denne oppførselen med en 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);
}Aliaser ved deserialisering
alias godtar en alternativ nøkkel ved lesing, noe som er nyttig når De støtter både gamle og nye feltnavn.
use serde::Deserialize;
#[derive(Deserialize)]
struct User {
#[serde(alias = "username")]
name: String,
}Flatten
flatten legger feltene fra en nestet struct direkte inn i foreldreobjektet og fjerner dermed ett nivå med nøsting i JSON.
use serde::Serialize;
#[derive(Serialize)]
struct Meta { page: u32 }
#[derive(Serialize)]
struct Resp {
data: String,
#[serde(flatten)]
meta: Meta,
}Egendefinert med modul
For full kontroll kan De la with peke på en modul som eksponerer funksjonene serialize og deserialize, for eksempel for å formatere et tidsstempel.
use serde::Serialize;
#[derive(Serialize)]
struct Event {
#[serde(with = "my_date_format")]
at: i64,
}Enum-merking
Kontroller hvordan enums kodes med tag (internt merket) eller untagged. Dette bestemmer JSON-strukturen for varianttyper.
use serde::Serialize;
#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
Click { x: i32, y: i32 },
Key { code: u8 },
}Hurtigsjekk
Test forståelsen Deres av egendefinert serialisering.
Oppsummering
De har lært å tilpasse serialisering:
renameogrename_alltilordner feltnavnskipogskip_serializing_ifstyrer resultatetdefaultogaliasforenkler deserialiseringflatten,withog enum-taghåndterer strukturen
Neste: formater utover JSON.
Lær deg Rust med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 39
- Leksjoner
- 144
Ofte stilte spørsmål
Er leksjonen «Egendefinert serialisering» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lær Rust-programmering, inkludert «Egendefinert serialisering», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lær Rust-programmering inneholder totalt 4 leksjoner.
Hva lærer jeg i «Egendefinert serialisering»?
Feltattributter Du øver på Lær Rust-programmering med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Lær Rust-programmering?
Ingen tidligere erfaring er nødvendig. Lær Rust-programmering på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Egendefinert serialisering»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Lær Rust-programmering-leksjonen?
Ja. Alle Lær Rust-programmering-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Serialisere og deserialisere
- Arbeide med JSON
- Egendefinert serialisering
- Andre formater