You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:40:33