自定义序列化

Serde 的 派生宏 通过 #[derive(Serialize, Deserialize)] 为 struct 和 enum 提供了合理的默认序列化行为,并且可以使用 属性 进行一定程度的定制。对于特殊需求,Serde 允许通过手动为您的类型实现 SerializeDeserialize traits 来完全定制序列化行为。

这两个 traits 每个都有一个方法:

use serde::{Serializer, Deserializer};

pub trait Serialize {
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer;
}

pub trait Deserialize<'de>: Sized {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>;
}

fn main() {}

这些方法是针对序列化格式进行泛型化的,由 SerializerDeserializer traits 表示。例如,JSON 有一个 Serializer 类型,而 Postcard 则有另一种。