Serde 序列化框架
学习目标
- 掌握 Serialize/Deserialize derive
- 掌握 JSON 读写
- 理解 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() {
let data = json!({
"name": "Alice",
"age": 30,
"scores": [95, 87, 92]
});
println!("{}", data["name"]);
println!("{}", data["scores"][0]);
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 };
let json = serde_json::to_string(&data)?;
let yaml = serde_yaml::to_string(&data)?;
let toml = toml::to_string(&data)?;
Ok(())
}
小结
| 功能 | API |
|---|
| 序列化 | serde_json::to_string |
| 反序列化 | serde_json::from_str |
| 宏 | json!({}) |
| 属性 | #[serde(rename, skip, default)] |