Lær Rust-programmering · leksjon

Egendefinert serialisering

Feltattributter

Leksjon 3 av 413 trinn

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:

  • rename og rename_all tilordner feltnavn
  • skip og skip_serializing_if styrer resultatet
  • default og alias forenkler deserialisering
  • flatten, with og enum-tag håndterer strukturen

Neste: formater utover JSON.

Gratis å komme i gang

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

  1. Serialisere og deserialisere
  2. Arbeide med JSON
  3. Egendefinert serialisering
  4. Andre formater
← Tilbake til Lær Rust-programmering