Benutzerdefinierte Serialisierung
Feldattribute
Benutzerdefinierte Serialisierung ist eine kostenlose Learn Rust Coding-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Learn Rust Coding-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.
Customizing serde
serde gives fine control over how fields map to a format using attributes. You rename fields, skip them, set defaults, and more, all via #[serde(...)].
Renaming a field
Use rename to map a Rust field name to a different key in the output, useful when JSON uses a different convention.
use serde::Serialize;
#[derive(Serialize)]
struct User {
#[serde(rename = "userName")]
user_name: String,
}Renaming everything
Apply a naming convention to all fields at once with rename_all, e.g. snake_case Rust to camelCase JSON.
use serde::Serialize;
#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
first_name: String,
last_name: String,
}Skipping fields
skip omits a field entirely. skip_serializing_if omits it conditionally, like hiding empty options.
use serde::Serialize;
#[derive(Serialize)]
struct User {
name: String,
#[serde(skip_serializing_if = "Option::is_none")]
nickname: Option<String>,
}Default values on deserialize
default supplies a value when a field is missing from the input, so deserialization does not fail.
use serde::Deserialize;
#[derive(Deserialize)]
struct Config {
#[serde(default)]
retries: u32,
}Custom default function
Point default at a function to provide a non-zero fallback value.
use serde::Deserialize;
fn default_port() -> u16 { 8080 }
#[derive(Deserialize)]
struct Config {
#[serde(default = "default_port")]
port: u16,
}Modeling rename + default
The attribute logic is just key mapping plus fallback. This runnable example mirrors that behavior with a 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);
}Aliases on deserialize
alias accepts an alternative key when reading, helpful when supporting both old and new field names.
use serde::Deserialize;
#[derive(Deserialize)]
struct User {
#[serde(alias = "username")]
name: String,
}Flatten
flatten inlines a nested struct's fields into the parent object, removing one level of nesting in the JSON.
use serde::Serialize;
#[derive(Serialize)]
struct Meta { page: u32 }
#[derive(Serialize)]
struct Resp {
data: String,
#[serde(flatten)]
meta: Meta,
}Custom with module
For full control, point with at a module exposing serialize and deserialize functions, e.g. to format a timestamp.
use serde::Serialize;
#[derive(Serialize)]
struct Event {
#[serde(with = "my_date_format")]
at: i64,
}Enum tagging
Control how enums encode with tag (internally tagged) or untagged. This shapes the JSON for variant types.
use serde::Serialize;
#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
Click { x: i32, y: i32 },
Key { code: u8 },
}Quick Check
Test your understanding of custom serialization.
Recap
You learned to customize serialization:
renameandrename_allmap field namesskip,skip_serializing_ifcontrol outputdefaultandaliasease deserializationflatten,with, and enumtaghandle shape
Next: formats beyond JSON.
Häufig gestellte Fragen
Ist die Lektion „Benutzerdefinierte Serialisierung“ kostenlos?
Ja — der vollständige Text von „Benutzerdefinierte Serialisierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Learn Rust Coding-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Learn Rust Coding-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Benutzerdefinierte Serialisierung“?
Feldattribute Du übst Learn Rust Coding mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Learn Rust Coding zu starten?
Keine Vorkenntnisse erforderlich. Learn Rust Coding auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Benutzerdefinierte Serialisierung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Learn Rust Coding-Lektion Code schreiben und ausführen?
Ja. Jede Learn Rust Coding-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Serialisieren und Deserialisieren
- Arbeiten mit JSON
- Benutzerdefinierte Serialisierung
- Andere Formate