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

如何仅为serde_json实现自定义序列化?,json,rust,serde,Json,Rust,Serde,我希望能够将Vec序列化为JSON(和其他基于UTF-8的格式)的base64编码字符串,同时保留二进制序列化格式的字节数组 #[derive(Serialize, Deserialize)] struct MyStruct { binary_data: Vec<u8>, } #[派生(序列化、反序列化)] 结构MyStruct{ 二进制_数据:Vec, } 默认情况下,serde_json将把二进制_数据字段序列化为一个数字数组。相反,我希望将其序列化为使用base64

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

#[derive(Serialize, Deserialize)]
struct MyStruct {
    binary_data: Vec<u8>,
}
#[派生(序列化、反序列化)]
结构MyStruct{
二进制_数据:Vec,
}
默认情况下,serde_json将把
二进制_数据
字段序列化为一个数字数组。相反,我希望将其序列化为使用base64编码的字符串。然而,我希望使用原始字节保留bincode(或任何其他二进制格式),并避免base64转换


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

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

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

pub struct StringableMyStruct(MyStruct);

虽然它没有解决我的问题,但它似乎是我能得到的唯一答案。谢谢你证实我的怀疑。