Serde für Rust: Vollständige Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Was ist Serde und wozu wird es benötigt

\n\n

Serde (Kurzform für Serialization/Deserialization) ist ein Framework zur Serialisierung und Deserialisierung von Datenstrukturen in der Sprache Rust. Es ist der De-facto-Standard für die Arbeit mit Datenformaten im Rust-Ökosystem. Die Bibliothek ermöglicht es, komplexe Rust-Typen (Strukturen, Aufzählungen, Vektoren, Hash-Tabellen) in verschiedene Text- und Binärformate (JSON, YAML, TOML, BSON, MessagePack, CBOR und viele andere) und zurück zu konvertieren.

\n\n

Die grundlegende Philosophie von Serde ist Leistung ohne Kompromisse. Sie nutzt das leistungsstarke Makrosystem von Rust, um hochoptimierten Code zur Kompilierzeit zu generieren, was sie zu einer der schnellsten Serialisierungsbibliotheken aller Programmiersprachen macht. Serde ist an kein bestimmtes Format gebunden: Es stellt die abstrakten Traits Serialize und Deserialize bereit, während die konkreten Formate in separaten Crates implementiert werden (z. B. serde_json, serde_yaml).

\n\n

Wozu wird Serde benötigt?

\n
    \n
  • Zustandsspeicherung: Speichern von Konfigurationen, Spielständen, Caches auf der Festplatte
  • \n
  • Netzwerkprotokolle: Datenaustausch zwischen Client und Server (REST API, WebSocket)
  • \n
  • Konfigurationsdateien: Einlesen von Einstellungen aus JSON/YAML/TOML
  • \n
  • Datenbanken: Serialisierung von Datensätzen zur Speicherung in Redis, MongoDB und anderen Datenbanken
  • \n
  • Interprozesskommunikation: Datenübertragung zwischen Prozessen über Pipes oder Sockets
  • \n
\n\n

Installation

\n\n

Serde wird über den in Rust integrierten Paketmanager Cargo installiert. Fügen Sie für den Einstieg die Abhängigkeiten in die Datei Cargo.toml ein:

\n\n
[dependencies]\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"
\n\n

Erklärung der Abhängigkeiten:

\n
    \n
  • serde — der Kern der Bibliothek mit den Traits Serialize und Deserialize. Das Flag features = ["derive"] aktiviert die Unterstützung des Makros #[derive(Serialize, Deserialize)].
  • \n
  • serde_json — die Implementierung des JSON-Formats. Analog werden serde_yaml, serde_toml, bincode und andere eingebunden.
  • \n
\n\n

Wenn Sie mit Rust 2021 Edition oder neuer arbeiten, reicht es aus, diese Zeilen einfach hinzuzufügen. Für die Installation einer bestimmten Version geben Sie die Nummer an, z. B. serde_json = "1.0.128".

\n\n

Schnellstart: Erstes Beispiel

\n\n

Erstellen wir eine einfache Struktur, serialisieren sie in JSON und deserialisieren sie dann zurück:

\n\n
use serde::{Deserialize, Serialize};\nuse serde_json;\n\n// Struktur mit automatischer Generierung von Serialisierungs-/Deserialisierungscode\n#[derive(Serialize, Deserialize, Debug)]\nstruct User {\n    id: u32,\n    name: String,\n    email: String,\n    active: bool,\n}\n\nfn main() {\n    // Erstellen einer Instanz der Struktur\n    let user = User {\n        id: 42,\n        name: "Alisa".to_string(),\n        email: "alice@example.com".to_string(),\n        active: true,\n    };\n\n    // Serialisierung in einen JSON-String\n    let json_string = serde_json::to_string(&user).unwrap();\n    println!("Serialisiertes JSON: {}", json_string);\n\n    // Deserialisierung zurück in die Struktur\n    let deserialized_user: User = serde_json::from_str(&json_string).unwrap();\n    println!("Deserialisierte Struktur: {:?}", deserialized_user);\n\n    // Überprüfen, ob keine Daten verloren gegangen sind\n    assert_eq!(user.id, deserialized_user.id);\n    assert_eq!(user.name, deserialized_user.name);\n}\n
\n\n

Programmausgabe:

\n
Serialisiertes JSON: {"id":42,"name":"Alisa","email":"alice@example.com","active":true}\nDeserialisierte Struktur: User { id: 4                    

Empfehlungen