Rust 在 JSON 序列化时复用结构体字段

依赖

toml 复制代码
[dependencies]
serde = { version = "1", features = ["derive"] }
serde_json = { version = "1" }

示例

参考 https://serde.rs/attr-flatten.html

rust 复制代码
#[derive(serde::Serialize, serde::Deserialize, Debug, Copy, Clone)]
#[serde(rename_all(serialize = "camelCase", deserialize = "camelCase"))]
pub struct PageRequest {
    pub page: i32,
    pub size: i32,
}

#[derive(serde::Serialize, serde::Deserialize, Debug)]
#[serde(rename_all(serialize = "camelCase", deserialize = "camelCase"))]
pub struct PageResponse<T> {
    #[serde(flatten)]
    page_request: PageRequest,
    total: i64,
    content: Vec<T>,
}

impl Default for PageRequest {
    fn default() -> Self {
        Self { page: 1, size: 10 }
    }
}

fn main() {
    // language=json
    let json = r#"{ "page": 1, "size": 5, "total": 100, "content": [1, 2, 3, 4, 5] }"#;

    let page_response = serde_json::from_str::<PageResponse<i32>>(json).unwrap();
    println!("{page_response:?}");

    let json = serde_json::to_string_pretty(&page_response).unwrap();
    println!("{json}")
}
相关推荐
阿正的梦工坊14 分钟前
【Rust】04-借用、引用与切片
java·数据库·rust
福大大架构师每日一题19 分钟前
2026年6月TIOBE编程语言排行榜,Go语言排名第13,Rust语言排名12。关于Rust已进入平台期的报道似乎为时过早。
开发语言·golang·rust
咸甜适中39 分钟前
rust语言学习笔记Trait(十六)Error(错误)
笔记·学习·rust
guyoung1 小时前
BoxAgnts 工具系统(4)——Tool Trait 与并发上下文模型
rust·agent·ai编程
techdashen4 小时前
What is maintenance, anyway?
开发语言·后端·rust
阿正的梦工坊4 小时前
【Rust】05-结构体、枚举与模式匹配
java·数据库·rust
星栈4 小时前
Makepad 应用如何读文件、调接口、保存数据
前端·rust
阿正的梦工坊4 小时前
【Rust】10-Cargo、测试与实用开发工作流
java·rust·log4j
PixelBai4 小时前
JSON差异比较集成指南与工作流自动化
运维·自动化·json
Java陈序员5 小时前
一键测算!一款筛选本机可流畅运行的大模型终端工具!
rust·llm