Java 在 Serde 中的瞬态等效于什么?

What is the equivalent of Java's transient in Serde?

我有兴趣使用像 Java 的 transient 这样的关键字使变量不自动序列化(例如,由 Serde),但在 Rust 中。我需要这个来存储密码。当然,我可以在序列化到磁盘时手动清除数据,但我想知道是否有更好、更自动的选项。

您可以使用 #[serde(skip)] 属性:

use serde::{Deserialize, Serialize}; // 1.0.88

#[derive(Deserialize, Serialize)]
struct MyStruct {
    field1: i32, // this will be (de)serialized
    #[serde(skip)]
    field2: i32, // this will be skipped
}

如果类型需要de序列化,最好在#[serde(skip)]后面加上#[serde(default)](或 #[serde(default = "fn_name")])属性。 Serde 反序列化跳过的字段,就好像 #[serde(default)] 是隐式添加的一样,但如果您明确说明此值的来源,阅读您的代码的人会更清楚。

参见: