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}")
}
相关推荐
ElasticPDF-新国产PDF编辑器27 分钟前
React 项目 PDF 批注插件库在线版 API 示例教程
react.js·pdf·json
豆芽脚脚3 小时前
合并相同 patient_id 的 JSON 数据为数组
postgresql·json
叠叠乐5 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
niandb6 小时前
The Rust Programming Language 学习 (九)
windows·rust
还是鼠鼠10 小时前
Node.js全局生效的中间件
javascript·vscode·中间件·node.js·json·express
Source.Liu12 小时前
【学Rust写CAD】26 图形像素获取(pixel_fetch.rs)
rust·cad
zhu128930355612 小时前
用Rust和WebAssembly打造轻量级前端加密工具
前端·rust·wasm
IT成长日记12 小时前
【MySQL基础】 JSON函数入门
mysql·json·json函数
阿沁QWQ13 小时前
应用层协议http
json
努力搬砖的咸鱼20 小时前
Qt中的数据解析--XML与JSON处理全攻略
xml·开发语言·qt·json