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)]
是隐式添加的一样,但如果您明确说明此值的来源,阅读您的代码的人会更清楚。
参见:
我有兴趣使用像 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)]
是隐式添加的一样,但如果您明确说明此值的来源,阅读您的代码的人会更清楚。
参见: