变体属性(Variant attributes)
-
#[serde(rename = "name")]用给定名称而不是其在 Rust 中的名称对此变体进行序列化和反序列化。
允许为序列化和反序列化分别指定独立的名称:
#[serde(rename(serialize = "ser_name"))]#[serde(rename(deserialize = "de_name"))]#[serde(rename(serialize = "ser_name", deserialize = "de_name"))]
-
#[serde(alias = "name")]从给定名称或其 Rust 名称反序列化此变体。可以重复使用以指定同一变体的多个可能名称。
-
#[serde(rename_all = "...")]根据给定的大小写约定对此结构变体的所有字段进行重命名。可能的值包括
"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(skip)]不要序列化或反序列化此变体。
-
#[serde(skip_serializing)]永远不序列化此变体。尝试序列化此变体将被视为错误。
-
#[serde(skip_deserializing)]永远不反序列化此变体。
-
#[serde(serialize_with = "path")]使用与
Serialize的实现中不同的函数对此变体进行序列化。给定的函数必须可调用为fn<S>(&FIELD0, &FIELD1, ..., S) -> Result<S::Ok, S::Error> where S: Serializer,尽管它也可以在FIELD{n}类型上为泛型。与serialize_with一起使用的变体不需要能够推导Serialize。对于每个字段,都存在
FIELD{n}。因此,单位变体仅具有S参数,而 tuple/struct 变体为每个字段都有一个参数。 -
#[serde(deserialize_with = "path")]使用与其
Deserialize实现不同的函数对此变体进行反序列化。给定的函数必须可调用为fn<'de, D>(D) -> Result<FIELDS, D::Error> where D: Deserializer<'de>,尽管它也可以在FIELDS的元素上为泛型。与deserialize_with一起使用的变体不需要能够推导Deserialize。FIELDS是变体的所有字段的元组。单位变体将以()作为其FIELDS类型。 -
#[serde(with = "module")]serialize_with和deserialize_with的组合。Serde 将使用$module::serialize作为serialize_with函数,$module::deserialize作为deserialize_with函数。 -
#[serde(bound = "T: MyTrait")]用于
Serialize和/或Deserializeimpls 的 where 子句。这将替换 Serde 为当前变体推断的任何 trait 限制。允许为序列化和反序列化分别指定独立的边界:
#[serde(bound(serialize = "T: MySerTrait"))]#[serde(bound(deserialize = "T: MyDeTrait"))]#[serde(bound(serialize = "T: MySerTrait", deserialize = "T: MyDeTrait"))]
-
#[serde(borrow)]和#[serde(borrow = "'a + 'b + ...")]通过使用零拷贝反序列化从反序列器中借用此字段的数据。请参阅 此示例。仅在新类型变体(只有一个字段的元组变体)上允许使用。
-
#[serde(other)]如果枚举标记不是此枚举中其他变体的标记,则反序列化此变体。仅允许在内部标记或相邻标记的枚举中的单位变体上使用。
例如,如果我们有一个带有
serde(tag = "variant")的内部标记枚举,其中包含A、B和Unknown标记为serde(other)的变体,那么Unknown变体将在输入的"variant"字段既不是"A"也不是"B"时进行反序列化。 -
#[serde(untagged)]不考虑枚举表示,将此变体序列化和反序列化为未标记的,即仅作为变体数据而没有变体名称的记录。
未标记的变体必须在枚举定义中最后排序。