You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:47:22