温馨提示:本文翻译自stackoverflow.com,查看原文请点击:json - How to implement a custom serialization only for serde_json?
json rust serde

json - 如何仅对serde_json实现自定义序列化?

发布于 2020-04-06 00:33:19

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

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

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

我想到的唯一解决方案是为串行器创建一个数据结构的副本,但是当您嵌套结构时,这确实很烦人且效率低下。

查看更多

提问者
Vlad Frolov
被浏览
99
211k 2020-02-04 04:10

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

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

pub struct StringableMyStruct(MyStruct);