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);
}
相关推荐
小码哥_常30 分钟前
解锁AI编程密码:程序员常用的10个AI提示词
后端
laowangpython1 小时前
Rust 入门:GitHub 热门内存安全编程语言
开发语言·其他·rust·github
直奔標竿1 小时前
Java开发者AI转型第二十七课!Spring AI 个人知识库实战(六)——全栈闭环收官,解锁前端流式渲染终极技巧
java·开发语言·前端·人工智能·后端·spring
金銀銅鐵2 小时前
[java] 编译之后的记录类(Record Classes)长什么样子(上)
java·jvm·后端
uzong3 小时前
我研读了 500 个 Spring Boot 生产级代码库,90% 都犯了这 7 个致命错误
后端
xiaobaoyu4 小时前
ssm知识点梳理
后端
IT_陈寒4 小时前
Vite的public文件夹放静态资源?这坑我替你踩了
前端·人工智能·后端
浮游本尊4 小时前
合同同步逻辑
后端
子兮曰5 小时前
别让爬虫白嫖你的导航站了:纯免费,手把手实现加密字体防爬
前端·javascript·后端
阿苟5 小时前
JAVA重点难点
后端