如何使用skip_serializing_if跳过布尔字段的serde序列化
解决Rust Serde序列化时跳过false布尔字段的问题
你遇到的问题是因为Rust的bool类型并没有内置is_false方法,导致serde的skip_serializing_if属性无法找到对应的函数。要实现当bar字段为false时跳过序列化,有两种简单的解决方案:
方案1:直接使用闭包判断
在skip_serializing_if中传入闭包,直接判断字段值是否为false:
use serde::Serialize; #[derive(Serialize)] pub struct Foo { #[serde(skip_serializing_if = |&val| val == false)] pub bar: bool, }
方案2:自定义判断函数
先定义一个is_false函数,再在属性中引用它:
use serde::Serialize; fn is_false(b: &bool) -> bool { !b } #[derive(Serialize)] pub struct Foo { #[serde(skip_serializing_if = "is_false")] pub bar: bool, }
两种方案都能实现需求:当bar为true时,JSON输出{"bar": true};当bar为false时,JSON输出{}。
内容的提问来源于stack exchange,提问作者Yuri Astrakhan
相关产品推荐
相关产品推荐

