我感兴趣的是使用像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
}
如果类型需要反序列化,那么伴随#[serde(skip)]
和#[serde(default)]
(或#[serde(default = "fn_name")]
)属性是一个好主意。 Serde反序列化跳过的字段,好像隐含地添加了#[serde(default)]
一样,但是如果你明确指出这个值来自哪里,那么阅读代码的人会更清楚。
看到: