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

2023-12-23

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

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

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

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


根据 Derde 的文档,您无法提供该方法的特殊实现Serialize相同结构的具体序列化器的特征。

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

pub struct StringableMyStruct(MyStruct);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何仅为serde_json实现自定义序列化? 的相关文章

随机推荐