75·常用生态进阶

Serde 序列化框架

Serde 序列化框架

学习目标

  1. 掌握 Serialize/Deserialize derive
  2. 掌握 JSON 读写
  3. 理解 serde 属性

核心概念

基本用法

[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = "1"
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize, Debug)]
struct User {
    name: String,
    age: u32,
    email: String,
}

fn main() -> Result<(), serde_json::Error> {
    let user = User {
        name: "Alice".to_string(),
        age: 30,
        email: "alice@example.com".to_string(),
    };

    // 序列化
    let json = serde_json::to_string(&user)?;
    println!("JSON: {}", json);

    // 反序列化
    let user2: User = serde_json::from_str(&json)?;
    println!("User: {:?}", user2);

    Ok(())
}

serde 属性

use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize, Debug)]
struct Config {
    #[serde(rename = "serverName")]
    server_name: String,

    #[serde(default)]
    port: u16,

    #[serde(skip_serializing_if = "Option::is_none")]
    password: Option<String>,

    #[serde(skip)]
    internal: bool,
}

JSON 值操作

use serde_json::{json, Value};

fn main() {
    // json! 宏
    let data = json!({
        "name": "Alice",
        "age": 30,
        "scores": [95, 87, 92]
    });

    println!("{}", data["name"]);
    println!("{}", data["scores"][0]);

    // 动态 JSON
    let value: Value = serde_json::from_str(r#"{"key": "value"}"#)?;
    println!("{}", value["key"]);
}

多格式支持

[dependencies]
serde_yaml = "0.9"
toml = "0.8"
use serde::{Serialize, Deserialize};

#[derive(Serialize, Deserialize)]
struct Data { name: String, value: i32 }

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let data = Data { name: "test".to_string(), value: 42 };

    // JSON
    let json = serde_json::to_string(&data)?;

    // YAML
    let yaml = serde_yaml::to_string(&data)?;

    // TOML
    let toml = toml::to_string(&data)?;

    Ok(())
}

小结

功能API
序列化serde_json::to_string
反序列化serde_json::from_str
json!({})
属性#[serde(rename, skip, default)]

练习编辑器

rust
Loading...