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}")
}
相关推荐
Source.Liu6 小时前
【Rust】枚举(Enum)详解
rust
唐装鼠9 小时前
Rust 类型转换语法大全(deepseek)
rust
电商API&Tina10 小时前
【电商API接口】关于电商数据采集相关行业
java·python·oracle·django·sqlite·json·php
天远数科12 小时前
Go语言金融风控:天远 全能小微企业报告组合接口的 AES 加密与异构 JSON 解析
大数据·golang·json
ServBay12 小时前
7个Rust写法让代码干净卫生又高效
后端·rust
Source.Liu14 小时前
【Rust】变量系统详解
rust
Source.Liu16 小时前
【Rust】数组与向量:集合类型全解
rust
唐装鼠16 小时前
Rust Box<T> 和引用(deepseek)
开发语言·rust
Source.Liu16 小时前
【Rust】结构体(Struct)详解
rust
isyuah18 小时前
Miko v0.7 发布:我写的一个 Rust Web 框架,虽然还是个玩具
后端·rust