Rust中如何将non-document类型的bson::Bson转换为Vec<u8>?
解决Rust Bson库序列化非Document类型到字节数组的问题
错误原因
BSON格式规范要求顶层结构必须是Document(键值对集合),bson::to_vec函数遵循这一规范,因此直接传入非Document类型的Bson值会触发序列化错误。
解决方案
方案1:将值包装进Document(符合BSON规范,推荐)
把单个Bson值放入一个Document中,作为某个键对应的值,即可正常序列化:
use bson::{Bson, doc}; fn main() { let value: Bson = Bson::String(String::from("heya")); // 用任意键名包裹值,这里用"content"作为示例 let wrapped_doc = doc! { "content": value }; let bytes = bson::to_vec(&wrapped_doc).unwrap(); // 后续处理字节数组 }
方案2:序列化单个值的原始BSON编码(非标准格式,谨慎使用)
如果确实需要仅获取单个Bson值的原始编码字节(不包含Document外壳),可以直接使用底层序列化器:
use bson::{Bson, ser::Serializer}; use serde::Serialize; fn main() { let value: Bson = Bson::String(String::from("heya")); let mut serializer = Serializer::new(Vec::new()); value.serialize(&mut serializer).unwrap(); let single_value_bytes = serializer.into_inner(); // 注意:此字节数组不符合完整BSON规范,多数解析器无法直接解析 }
内容的提问来源于stack exchange,提问作者user1664202
相关产品推荐
相关产品推荐

