- 实现思路:
- 引入
serde
和base64
相关依赖。serde
用于序列化和反序列化,base64
用于处理Base64编码。
- 为
CustomType
结构体实现Serialize
trait,在实现中先将Vec<u8>
数据编码为Base64字符串,再进行序列化。
- 为
CustomType
结构体实现Deserialize
trait,在实现中先反序列化Base64字符串,再解码为Vec<u8>
数据。
- 关键代码实现:
[dependencies]
serde = { version = "1.0", features = ["derive"] }
base64 = "0.21"
serde_json = "1.0"
use serde::{Serialize, Deserialize};
use base64::Engine as _;
struct CustomType {
data: Vec<u8>,
}
impl Serialize for CustomType {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let base64_data = base64::engine::general_purpose::STANDARD.encode(&self.data);
serializer.serialize_str(&base64_data)
}
}
impl<'de> Deserialize<'de> for CustomType {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
let base64_data = String::deserialize(deserializer)?;
let data = base64::engine::general_purpose::STANDARD.decode(base64_data).map_err(serde::de::Error::custom)?;
Ok(CustomType { data })
}
}
use serde_json;
fn main() {
let custom_type = CustomType { data: vec![1, 2, 3] };
let serialized = serde_json::to_string(&custom_type).expect("Serialization failed");
println!("Serialized: {}", serialized);
let deserialized: CustomType = serde_json::from_str(&serialized).expect("Deserialization failed");
println!("Deserialized data: {:?}", deserialized.data);
}