字段属性(Field attributes)
-
#[serde(rename = "name")]
使用给定的名称而不是其在 Rust 中的名称对该字段进行序列化和反序列化。这对于将字段序列化为驼峰命名 或使用保留的 Rust 关键字命名字段很有用。
允许指定序列化和反序列化的独立名称:
#[serde(rename(serialize = "ser_name"))]
#[serde(rename(deserialize = "de_name"))]
#[serde(rename(serialize = "ser_name", deserialize = "de_name"))]
-
#[serde(alias = "name")]
从给定名称 或 其 Rust 名称中反序列化此字段。可以重复使用来指定相同字段的多个可能名称。
-
#[serde(default)]
如果在反序列化时值不存在,则使用
Default::default()
。 -
#[serde(default = "path")]
如果在反序列化时值不存在,则调用一个函数来获取默认值。给定的函数必须可以调用为
fn() -> T
。例如,default = "empty_value"
将调用empty_value()
,default = "SomeTrait::some_default"
将调用SomeTrait::some_default()
。 -
#[serde(flatten)]
将此字段的内容扁平化到其所定义的容器中。
这会在序列化表示和 Rust 数据结构表示之间消除一层结构。它可用于将常用的 keys 化为一个共享结构,或将剩余字段捕获到一个可带有任意字符串 keys 的 map 中。结构扁平化 页面提供了一些示例。
注意: 此属性不支持在 struct 与
deny_unknown_fields
中一起使用。外部扁平化的结构和内部扁平化的结构都不应该使用该属性。 -
#[serde(skip)]
跳过此字段:不对其进行序列化或反序列化。
-
#[serde(skip_serializing)]
在序列化时跳过此字段,但在反序列化时不跳过。
在反序列化时,Serde 将使用
Default::default()
或由default = "..."
给出的函数来获取该字段的默认值。 -
#[serde(skip_deserializing)]
在反序列化时跳过此字段,但在序列化时不跳过。
在反序列化时,Serde 将使用
Default::default()
或由default = "..."
给出的函数来获取该字段的默认值。 -
#[serde(skip_serializing_if = "path")]
调用一个函数来确定是否跳过序列化该字段。给定的函数必须可调用为
fn(&T) -> bool
,尽管它可能是关于T
的通用函数。例如,skip_serializing_if = "Option::is_none"
将跳过为 None 的 Option。 -
#[serde(serialize_with = "path")]
使用一个与其
Serialize
实现中不同的函数来序列化此字段。给定的函数必须可调用为fn<S>(&T, S) -> Result<S::Ok, S::Error> where S: Serializer
,尽管它也可能是关于T
的通用函数。使用serialize_with
的字段不需要实现Serialize
。 -
#[serde(deserialize_with = "path")]
使用一个与其
Deserialize
实现中不同的函数来反序列化此字段。给定的函数必须可调用为fn<'de, D>(D) -> Result<T, D::Error> where D: Deserializer<'de>
,尽管它也可能是关于T
的通用函数。使用deserialize_with
的字段不需要实现Deserialize
。 -
#[serde(with = "module")]
serialize_with
和deserialize_with
的组合。Serde 将使用$module::serialize
作为serialize_with
函数,将$module::deserialize
作为deserialize_with
函数。 -
#[serde(borrow)]
和#[serde(borrow = "'a + 'b + ...")]
通过零拷贝反序列化从反序列化器中为此字段借用数据。请参阅此示例。
-
#[serde(bound = "T: MyTrait")]
Serialize
和Deserialize
实现的条件。这取代了 Serde 为当前字段推断的任何特质边界。允许为序列化和反序列化指定独立的边界:
#[serde(bound(serialize = "T: MySerTrait"))]
#[serde(bound(deserialize = "T: MyDeTrait"))]
#[serde(bound(serialize = "T: MySerTrait", deserialize = "T: MyDeTrait"))]
-
#[serde(getter = "...")]
用于派生远程类型 的
Serialize
时,该类型具有一个或多个私有字段时使用。