如何仅为 serde_json 实现自定义序列化?

How to implement a custom serialization only for serde_json?

我希望能够将 Vec<u8> 序列化为 JSON(以及其他基于 UTF-8 的格式)的 base64 编码字符串,同时保留二进制序列化格式的字节数组.

#[derive(Serialize, Deserialize)]
struct MyStruct {
    binary_data: Vec<u8>,
}

默认情况下,serde_json 会将 binary_data 字段序列化为数字数组。相反,我想将其序列化为使用 base64 编码的字符串。然而,我想使用原始字节保留 bincode(或任何其他二进制格式)并避免 base64 转换。

我想出的唯一解决方案是专门为序列化程序创建一个数据结构的副本,但是当你有嵌套结构时,这真的很烦人而且效率低下。

根据 Derde 的文档,您不能为相同结构的具体序列化程序提供 Serialize 特征的特殊实现。

您可以创建新类型结构,然后为 StringableMyStruct 提供自定义 serde::{Des,S}erialize 实现以支持字段中的 String

pub struct StringableMyStruct(MyStruct);