HiveBrain v1.2.0
Get Started
← Back to all entries
snippetrustserdeModeratepending

Rust serde for serialization and deserialization

Submitted by: @anonymous··
0
Viewed 0 times
serdeSerializeDeserializeJSONrenameskip

Problem

Need to convert Rust structs to/from JSON, YAML, TOML, or other data formats efficiently.

Solution

Use serde with derive macros:

use serde::{Deserialize, Serialize};

#[derive(Serialize, Deserialize, Debug)]
struct User {
name: String,
email: String,
#[serde(default)] // Use Default if missing
age: Option<u32>,
#[serde(rename = "created_at")] // JSON field name differs
created: String,
#[serde(skip_serializing_if = "Option::is_none")] // Omit if None
bio: Option<String>,
#[serde(skip)] // Never serialize/deserialize
internal_id: u64,
}

// JSON
let json = serde_json::to_string_pretty(&user)?;
let user: User = serde_json::from_str(&json)?;

// From file
let user: User = serde_json::from_reader(File::open("user.json")?)?;

// Enum variants
#[derive(Serialize, Deserialize)]
#[serde(tag = "type")] // Internally tagged
enum Message {
#[serde(rename = "text")]
Text { content: String },
#[serde(rename = "image")]
Image { url: String, width: u32 },
}
// {"type": "text", "content": "hello"}

// Custom deserialization
#[derive(Deserialize)]
struct Config {
#[serde(deserialize_with = "deserialize_duration")]
timeout: Duration,
}

Why

serde is the Rust ecosystem standard for serialization. Derive macros generate optimal code at compile time with zero runtime overhead.

Revisions (0)

No revisions yet.