rust-Serialize序列和反序列Deserialize
【摘要】 rust-Serialize序列和反序列Deserialize
rust-Serialize序列和反序列Deserialize
🍎Serialize序列和反序列Deserialize认识
Deserialize 是 serde 库中的两个非常重要的 trait,分别用于序列化和反序列化数据结构
序列化是将一个数据结构(例如结构体、枚举)转化为可以存储或传输的格式,通常是 JSON、Bincode、YAML 或其他格式的字节流
一句话记忆:
- Serialize = 序列化 = “写出去”
- Deserialize = 反序列化 = “读进来”
// 登录请求体
#[derive(serde::Deserialize)]
pub struct LoginRequest {
pub username: String,
pub password: String,
}
// 注册请求体
#[derive(Serialize)]
pub struct RegisterRequest {
pub username: String,
pub password: String,
}
🍎区别如下
有时候我们写请求体的方式略微不同
Deserialize 和 Serialize 都是 Rust 里 serde 库的两个重要 trait(特征)
Serialize
作用:把 Rust 结构体/枚举/数据类型 转换成外部格式(如 JSON、XML、二进制等)。
方向:Rust → 外部格式
常见场景:后端返回数据给前端时,需要把 Rust 结构体转成 JSON 字符串。
use serde::Serialize;
#[derive(Serialize)]
struct User {
name: String,
age: u8,
}
// 结构体转成 JSON 字符串
let user = User { name: "张三".to_string(), age: 18 };
let json = serde_json::to_string(&user).unwrap();
// json: {"name":"张三","age":18}
Deserialize
- 作用:把外部格式(如 JSON、XML、二进制等)转换成 Rust 结构体/枚举/数据类型。
- 方向:外部格式 → Rust
- 常见场景:前端提交 JSON 数据,后端需要把 JSON 转成 Rust 结构体来处理。
例子
use serde::Deserialize;
#[derive(Deserialize)]
struct User {
name: String,
age: u8,
}
// JSON 字符串转成结构体
let json = r#"{"name":"张三","age":18}"#;
let user: User = serde_json::from_str(json).unwrap();
// user.name == "张三"
e 之间有什么区别
总结对比
| trait | 方向 | 作用 | 常用场景 |
|---|---|---|---|
| Serialize | Rust → 外部格式 | 结构体转 JSON/其它格式 | 返回数据给前端 |
| Deserialize | 外部格式 → Rust | JSON/其它格式转结构体 | 接收前端请求数据 |
🍎使用
在 Cargo.toml 中引入 serde 和 serde_derive(如果你想通过 #[derive] 自动生成序列化和反序列化代码),以及支持的具体格式(如 serde_json)
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
序列化使用
使用 #[derive(Serialize)] 来自动派生序列化实现
use serde::Serialize;
use serde_json;
#[derive(Serialize)]
struct Person {
name: String,
age: u32,
}
fn main() {
let person = Person {
name: String::from("Alice"),
age: 30,
};
// 将数据结构序列化为 JSON 字符串
let json = serde_json::to_string(&person).unwrap();
println!("Serialized JSON: {}", json);
}
反序列化
use serde::Deserialize;
use serde_json;
#[derive(Deserialize)]
struct Person {
name: String,
age: u32,
}
fn main() {
let json = r#"{ "name": "Alice", "age": 30 }"#;
// 将 JSON 字符串反序列化为 Person 结构体
let person: Person = serde_json::from_str(json).unwrap();
println!("Deserialized Person: {} is {} years old.", person.name, person.age);
}
Serialize序列和反序列Deserialize结合
结合可以将结构体序列化为 JSON,并在需要时将其反序列化回来。
use serde::{Serialize, Deserialize};
use serde_json;
#[derive(Serialize, Deserialize)]
struct Person {
name: String,
age: u32,
}
fn main() {
// 创建一个结构体实例
let person = Person {
name: String::from("Alice"),
age: 30,
};
// 序列化为 JSON 字符串
let json = serde_json::to_string(&person).unwrap();
println!("Serialized JSON: {}", json);
// 反序列化回结构体
let deserialized_person: Person = serde_json::from_str(&json).unwrap();
println!("Deserialized Person: {} is {} years old.", deserialized_person.name, deserialized_person.age);
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)