有没有比这更好(更简洁)的方式来表达我的 self :
#[derive(Serialize, Deserialize, Debug, Default]
pub struct PagingObject {
#[serde(skip_serializing_if = "Option::is_none")]
offsetId: Option<String>, // offset expressed as element id (uuid)
#[serde(skip_serializing_if = "Option::is_none")]
offset: Option<i32>, // offset expressed as index (numeric)
#[serde(skip_serializing_if = "Option::is_none")]
total: Option<i32>, // total number of elements
#[serde(skip_serializing_if = "Option::is_none")]
totalPages: Option<i32>, // total number of pages based on limit
#[serde(skip_serializing_if = "Option::is_none")]
previous: Option<String>, // link to previous page
#[serde(skip_serializing_if = "Option::is_none")]
next: Option<String>, // link to next page
#[serde(skip_serializing_if = "Option::is_none")]
limit: Option<i32> // the limit used
}
最佳答案
serde 没有任何内置的方法来处理这个问题。但是,第三方serde_with::skip_serializing_none
宏解决了这个问题。用法很简单,只需在派生前添加另一个属性即可。
#[serde_with::skip_serializing_none]
#[derive(Serialize, Deserialize, Debug, Default]
pub struct PagingObject {
offsetId: Option<String>, // offset expressed as element id (uuid)
offset: Option<i32>, // offset expressed as index (numeric)
total: Option<i32>, // total number of elements
totalPages: Option<i32>, // total number of pages based on limit
previous: Option<String>, // link to previous page
next: Option<String>, // link to next page
limit: Option<i32> // the limit used
}
关于json - 在 Rust 中使用可选的 JSON 字段,避免在 JSON 中使用 None/null,而是使用 undefined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71827811/