容器属性(Container attributes)
-
#[serde(rename = "name")]
使用指定的名称而不是 Rust 中的名称对此结构体或枚举进行序列化和反序列化。
允许在序列化和反序列化中指定独立的名称:
#[serde(rename(serialize = "ser_name"))]
#[serde(rename(deserialize = "de_name"))]
#[serde(rename(serialize = "ser_name", deserialize = "de_name"))]
-
#[serde(rename_all = "...")]
根据给定的大小写规范来重命名所有字段(如果是 Struct)或变体(如果是 Enum)。可能的取值为
"lowercase"
、"UPPERCASE"
、"PascalCase"
、"camelCase"
、"snake_case"
、"SCREAMING_SNAKE_CASE"
、"kebab-case"
、"SCREAMING-KEBAB-CASE"
。允许在序列化和反序列化中指定独立的大小写规范:
#[serde(rename_all(serialize = "..."))]
#[serde(rename_all(deserialize = "..."))]
#[serde(rename_all(serialize = "...", deserialize = "..."))]
-
#[serde(rename_all_fields = "...")]
根据给定的大小写规范,在 enum 的每个 struct variant 上应用
rename_all
。可能的取值为"lowercase"
、"UPPERCASE"
、"PascalCase"
、"camelCase"
、"snake_case"
、"SCREAMING_SNAKE_CASE"
、"kebab-case"
、"SCREAMING-KEBAB-CASE"
。允许在序列化和反序列化中指定独立的大小写规范:
#[serde(rename_all_fields(serialize = "..."))]
#[serde(rename_all_fields(deserialize = "..."))]
#[serde(rename_all_fields(serialize = "...", deserialize = "..."))]
-
#[serde(deny_unknown_fields)]
在反序列化时,遇到未知字段时始终报错。如果没有这个属性,默认情况下,对于像 JSON 这样的自描述格式,未知字段会被忽略。
注意: 此属性不支持与
flatten
一起使用,无论是在外部结构体上还是在已展开的字段上。 -
#[serde(tag = "type")]
对于 enum :使用内部标记的枚举表示,使用给定的标记。有关此表示的详细信息,请参见枚举表示。
对于具有命名字段的 struct:将结构体的名称(或
serde(rename)
的值)序列化为具有给定键的字段,并排在结构体的所有实际字段之前。 -
#[serde(tag = "t", content = "c")]
对于此枚举,使用邻接标记的枚举表示,并使用给定的标记和内容字段名称。有关此表示的详细信息,请参见枚举表示。
-
#[serde(untagged)]
对于此枚举,使用非标记的枚举表示。有关此表示的详细信息,请参见枚举表示。
-
#[serde(bound = "T: MyTrait")]
用于
Serialize
和Deserialize
实现的where
子句。这将替换 Serde 推断的任何 trait 约束。允许在序列化和反序列化中指定独立的约束:
#[serde(bound(serialize = "T: MySerTrait"))]
#[serde(bound(deserialize = "T: MyDeTrait"))]
#[serde(bound(serialize = "T: MySerTrait", deserialize = "T: MyDeTrait"))]
-
#[serde(default)]
在反序列化时,任何丢失的字段都应该从该结构体对
Default
的实现中填充。仅允许在结构体上使用。 -
#[serde(default = "path")]
在反序列化时,任何丢失的字段都应该从给定函数或方法返回的对象中填充。该函数必须可调用为
fn() -> T
。例如,default = "my_default"
将调用my_default()
,default = "SomeTrait::some_default"
将调用SomeTrait::some_default()
。仅允许在结构体上使用。 -
#[serde(remote = "...")]
用于派生 远程类型 的
Serialize
和Deserialize
。 -
#[serde(transparent)]
序列化和反序列化新类型结构体或带有一个字段的括号结构体,就好像它的一个字段被单独序列化和反序列化一样。类似于
#[repr(transparent)]
。 -
#[serde(from = "FromType")]
通过将类型先反序列化为
FromType
,然后转换,来反序列化。该类型必须实现From<FromType>
,并且FromType
必须实现Deserialize
。 -
#[serde(try_from = "FromType")]
通过将其反序列化为
FromType
,然后进行可失败转换,来反序列化此类型。该类型必须使用实现具有实现Display
的错误类型的TryFrom<FromType>
,并且FromType
必须实现Deserialize
。 -
#[serde(into = "IntoType")]
通过先将该类型转换为指定的
IntoType
再将其序列化,来序列化该类型。该类型必须实现Clone
和Into<IntoType>
,并且IntoType
必须实现Serialize
。 -
#[serde(crate = "...")]
指定生成代码时引用 Serde API 用的
serde
包的路径。通常情况下,仅当从不同 crate 中的公共宏调用重新导出的 Serde 派生时才适用。 -
#[serde(expecting = "...")]
为反序列化错误消息指定自定义类型期望文本。这将用于容器
Visitor
生成的expecting
方法,并用作 untagged enums 的默认错误消息。