Serializzazione personalizzata
Attributi dei campi
Serializzazione personalizzata è una lezione Learn Rust Coding gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn Rust Coding, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn Rust Coding include 4 lezioni in totale.
Personalizzare serde
serde offre un controllo preciso sul modo in cui i campi vengono associati a un formato tramite gli attributi. Potete rinominare i campi, ometterli, impostare valori predefiniti e altro ancora, tutto tramite #[serde(...)].
Rinominare un campo
Utilizzate rename per associare il nome di un campo Rust a una chiave diversa nell'output, utile quando il JSON usa una convenzione differente.
use serde::Serialize;
#[derive(Serialize)]
struct User {
#[serde(rename = "userName")]
user_name: String,
}Rinominare tutto
Applicate una convenzione di denominazione a tutti i campi contemporaneamente con rename_all, ad esempio da snake_case in Rust a camelCase nel JSON.
use serde::Serialize;
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
first_name: String,
last_name: String,
}Saltare i campi
skip omette completamente un campo. skip_serializing_if lo omette in modo condizionale, ad esempio per nascondere le opzioni vuote.
use serde::Serialize;
#[derive(Serialize)]
struct User {
name: String,
#[serde(skip_serializing_if = "Option::is_none")]
nickname: Option<String>,
}Valori predefiniti durante la deserializzazione
default fornisce un valore quando un campo manca nell'input, evitando che la deserializzazione fallisca.
use serde::Deserialize;
#[derive(Deserialize)]
struct Config {
#[serde(default)]
retries: u32,
}Funzione per il valore predefinito
Fate puntare default a una funzione per fornire un valore alternativo diverso da zero.
use serde::Deserialize;
fn default_port() -> u16 { 8080 }
#[derive(Deserialize)]
struct Config {
#[serde(default = "default_port")]
port: u16,
}Modellare rinomina e valore predefinito
La logica degli attributi consiste semplicemente nell'associare le chiavi e fornire un valore alternativo. Questo esempio eseguibile riproduce tale comportamento con una 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);
}Alias durante la deserializzazione
alias accetta una chiave alternativa durante la lettura, utile per supportare sia i nomi dei campi vecchi sia quelli nuovi.
use serde::Deserialize;
#[derive(Deserialize)]
struct User {
#[serde(alias = "username")]
name: String,
}Flatten
flatten inserisce i campi di una struct annidata direttamente nell'oggetto padre, eliminando un livello di annidamento nel JSON.
use serde::Serialize;
#[derive(Serialize)]
struct Meta { page: u32 }
#[derive(Serialize)]
struct Resp {
data: String,
#[serde(flatten)]
meta: Meta,
}Personalizzazione con un modulo
Per ottenere il pieno controllo, fate puntare with a un modulo che espone le funzioni serialize e deserialize, ad esempio per formattare un timestamp.
use serde::Serialize;
#[derive(Serialize)]
struct Event {
#[serde(with = "my_date_format")]
at: i64,
}Tagging degli enum
Controllate il modo in cui gli enum vengono codificati con tag (tagging interno) o untagged. In questo modo definite la struttura JSON dei tipi con varianti.
use serde::Serialize;
#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
Click { x: i32, y: i32 },
Key { code: u8 },
}Verifica rapida
Verificate la vostra comprensione della serializzazione personalizzata.
Riepilogo
Avete imparato a personalizzare la serializzazione:
renameerename_allassociano i nomi dei campiskipeskip_serializing_ifcontrollano l'outputdefaultealiassemplificano la deserializzazioneflatten,withetagper gli enum gestiscono la struttura
Avanti: formati oltre il JSON.
Domande Frequenti
La lezione «Serializzazione personalizzata» è gratuita?
Sì — il testo completo di «Serializzazione personalizzata» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn Rust Coding, passa a CoddyKit PRO. Il corso Learn Rust Coding include 4 lezioni in totale.
Cosa imparerò in «Serializzazione personalizzata»?
Attributi dei campi Eserciti Learn Rust Coding con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn Rust Coding?
Non è richiesta alcuna esperienza precedente. Learn Rust Coding su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Serializzazione personalizzata»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn Rust Coding?
Sì. Ogni lezione Learn Rust Coding include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Serializzazione e deserializzazione
- Uso del JSON
- Serializzazione personalizzata
- Altri formati