根据某些运行时条件,我想要么序列化一个字段,要么不序列化。该条件适用于整个序列化,与字段值本身无关。因此,我不能使用 skip_serializing_if()
如果我理解正确,除非我使用某种全局状态,但这更像是一个常量,而不是一个“条件”。
例如,假设条件取决于请求文件的客户端。一些客户需要拥有该领域,而其他客户则不需要。
如果条件显示序列化,即使字段的值是 None
也要这样做(即在输出 JSON 中显式创建一个具有 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());
}
Playground
关于rust - Serde 跳过字段序列化取决于 "global"运行时条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69468743/