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

C#使用BsonDocument.Parse解析MongoDB查询报System.FormatException如何解决

错误原因分析

你遇到的System.FormatException报错,核心原因是BsonDocument.Parse()方法仅支持解析单个符合格式的BSON文档字符串:

  • 你传入的"{'Username':'Test'},{ 'Age':'25'}"是两个独立的BSON文档用逗号拼接的结果,不属于单个合法BSON结构,因此解析器读到第一个文档结尾后发现还有剩余字符就抛出异常。
  • 你给出的第二种$group片段本身也不是完整的独立BSON文档,缺少外层大括号包裹,同样无法直接用BsonDocument.Parse()解析。
不同场景的正确解析方案

场景1:解析多个逗号分隔的BSON文档(比如查询条件+投影参数的组合)

如果你传入的字符串是MongoDB查询方法里的filter和projection两个参数的拼接内容,需要先拆分两个文档分别解析:

// 示例为简单拆分,复杂嵌套场景建议用官方批量解析方法
var rawStr = "{'Username':'Test'},{ 'Age':'25'}";
// 定位第一个文档闭合后的分割逗号
var splitIndex = rawStr.IndexOf("},") + 1;
var filterStr = rawStr.Substring(0, splitIndex).Trim();
var projectionStr = rawStr.Substring(splitIndex + 1).Trim();

// 分别解析为BsonDocument
var filter = BsonDocument.Parse(filterStr);
var projection = BsonDocument.Parse(projectionStr);

// 调用查询的示例
var result = collection.Find(filter).Project(projection).ToList();

如果需要批量解析任意数量的BSON文档,用官方提供的序列化器更稳妥:

using var reader = new JsonReader("{'Username':'Test'},{ 'Age':'25'}");
var serializer = BsonSerializer.LookupSerializer<BsonDocument>();
var docs = new List<BsonDocument>();
while (reader.ReadBsonType() != BsonType.EndOfDocument)
{
    docs.Add(serializer.Deserialize(BsonDeserializationContext.CreateRoot(reader)));
}

场景2:解析聚合阶段片段

聚合操作的单个阶段本身是完整BSON文档,你给出的$group片段补全外层大括号后即可正常解析:

// 补全外层大括号,形成合法BSON结构
var groupStageStr = @"{'$group' : {""_id"" : {""Username"" : ""$Test""}}}";
var groupStage = BsonDocument.Parse(groupStageStr);

// 加入聚合管道的示例
var pipeline = PipelineDefinition<BsonDocument, BsonDocument>.Create(groupStage);
var aggResult = collection.Aggregate(pipeline).ToList();

如果是完整的聚合管道数组,直接解析为BsonArray即可:

var pipelineStr = @"[{'$match':{'Username':'Test'}},{'$group' : {""_id"" : {""Username"" : ""$Test""}}}]";
var pipeline = BsonSerializer.Deserialize<BsonArray>(pipelineStr).Select(x => x.AsBsonDocument).ToList();

注意事项

BSON的JSON格式默认要求键值对用双引号包裹,MongoDB C#驱动虽然兼容单引号解析,但建议统一使用双引号避免不必要的格式异常。

内容的提问来源于stack exchange,提问作者Ammar Al-Sadeq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:48:00