rust-Serialize序列和反序列Deserialize

rust-Serialize序列和反序列Deserialize

🍎Serialize序列和反序列Deserialize认识

Deserializeserde 库中的两个非常重要的 trait,分别用于序列化反序列化数据结构

序列化是将一个数据结构(例如结构体、枚举)转化为可以存储或传输的格式,通常是 JSON、Bincode、YAML 或其他格式的字节流

一句话记忆:

  • Serialize = 序列化 = "写出去"
  • Deserialize = 反序列化 = "读进来"
javascript 复制代码
// 登录请求体
#[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 字符串。

javascript 复制代码
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 结构体来处理。

例子

javascript 复制代码
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 中引入 serdeserde_derive(如果你想通过 #[derive] 自动生成序列化和反序列化代码),以及支持的具体格式(如 serde_json

javascript 复制代码
[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
序列化使用

使用 #[derive(Serialize)] 来自动派生序列化实现

javascript 复制代码
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);
}
反序列化
javascript 复制代码
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,并在需要时将其反序列化回来。

javascript 复制代码
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);
}
相关推荐
用户68545375977693 小时前
🌐 分布式算法:限流、负载均衡、分布式ID,实战必备!
后端
后端小张3 小时前
【JAVA 进阶】穿越之我在修仙世界学习 @Async 注解(深度解析)
java·开发语言·spring boot·后端·spring·注解·原理
Yeats_Liao3 小时前
Go Web 编程快速入门 18 - 附录B:查询与扫描
开发语言·前端·后端·golang
国服第二切图仔3 小时前
Rust实战开发之图形界面开发入门(egui crate)
开发语言·后端·rust
程序员爱钓鱼3 小时前
Python编程实战:文件读写(文本/二进制)详解与实战
后端·python·ipython
Zhangzy@3 小时前
Rust 依赖管理与版本控制
开发语言·后端·rust
百锦再3 小时前
第6章 结构体与方法
android·java·c++·python·rust·go
Momentary_SixthSense3 小时前
rust表格文件处理
开发语言·rust
程序员爱钓鱼3 小时前
Python编程实战:try...except...finally —— 让程序更稳健的异常处理机制
后端·python