根据某些运行时条件,我想序列化或不序列化字段。该条件适用于整个序列化,与字段值本身无关。因此,如果我理解正确的话,我就不能使用skip_serializing_if()
它,除非我使用某种全局状态,但这更像是一个常量,而不是一个“条件”。
例如,假设条件取决于请求文件的客户端。有些客户需要拥有该字段,而其他客户则不需要。
如果条件表示序列化,即使字段的值为序列化(即显式创建一个具有输出 JSON 中的值的None
属性),也请执行序列化操作。null
实现这一目标的最简单、最干净的方法是什么?
只需创建一个函数并忽略参数:
use serde_json; // 1.0.67
use serde::Serialize; // 1.0.130
fn condition_met<T>(_: &T) -> bool {
false
}
#[derive(Serialize)]
struct Foo {
#[serde(skip_serializing_if = "condition_met")]
data: Option<u32>,
}
fn main() {
println!("{}", serde_json::to_string(&Foo{data: None}).unwrap());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1033 次 |
最近记录: |