json - 如何仅为 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 转换。
我想出的唯一解决方案是专门为序列化程序创建数据结构的副本,但是当您有嵌套结构时,这真的很烦人且效率低下。
解决方案
根据 Derde 的文档,您不能为Serialize
相同结构的具体序列化程序提供 trait 的特殊实现。
您可以创建一个新类型结构,然后提供自定义serde::{Des,S}erialize
实现StringableMyStruct
以支持String
字段中的 s:
pub struct StringableMyStruct(MyStruct);
推荐阅读
- php - 更好的性能 - MySQL 临时表或直接读取 CSV 文件或其他什么?
- java - 如何从android中的切换按钮获取价值?
- actionscript-3 - 定时器、SetInterval、报警等
- php - 网址重写形式
- ruby-on-rails - Rails 和 Kaminari -- 如何消除页间隙 [...]?
- php - 使用 PHP 将用户名设为大写
- variables - laravel 5.2 视图中的“未定义变量:a”
- java - Java Array split() 显示所有值但给出 arrayindexoutofbound 异常错误
- reactjs - 使用 Swagger 跨 IIS Express 管理微服务架构
- php - 从数据库中的laravel自动完成