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}")
}
相关推荐
QMCY_jason2 小时前
Ubuntu 安装RUST
linux·ubuntu·rust
碳苯6 小时前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os
zaim18 小时前
计算机的错误计算(一百一十四)
java·c++·python·rust·go·c·多项式
ZhongruiRao17 小时前
Springboot+PostgreSQL+MybatisPlus存储JSON或List、数组(Array)数据
spring boot·postgresql·json
凌云行者18 小时前
使用rust写一个Web服务器——单线程版本
服务器·前端·rust
华农第一蒟蒻18 小时前
Java中JWT(JSON Web Token)的运用
java·前端·spring boot·json·token
胡耀超19 小时前
知识图谱入门——8: KG开发常见数据格式:OWL、RDF、XML、GraphML、JSON、CSV。
xml·json·知识图谱·csv·owl·graphml·gml
cyz14100120 小时前
vue3+vite@4+ts+elementplus创建项目详解
开发语言·后端·rust
超人不怕冷21 小时前
[rust]多线程通信之通道
rust
x-cmd1 天前
[241005] 14 款最佳免费开源图像处理库 | PostgreSQL 17 正式发布
数据库·图像处理·sql·安全·postgresql·开源·json