首页 > 解决方案 > 如何仅为 serde_json 实现自定义序列化?

问题描述

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

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

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

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

标签: jsonrustserde

解决方案


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

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

pub struct StringableMyStruct(MyStruct);

推荐阅读