C#如何将MongoDB的JSON数组字符串转换为BsonArray?
解决方案
问题原因
你手里的文本不是标准JSON,也不是MongoDB严格模式的扩展JSON,而是Mongo Shell输出的Shell模式JSON,包含ObjectId()、ISODate()、Long()这类Mongo Shell内置构造函数语法,默认的JSON解析器和Bson序列化器都不会识别这类语法,所以会报错。
解决步骤
不需要自定义类,只需要调整MongoDB官方Bson库的解析配置,开启Shell语法支持即可:
- 先确保项目已安装NuGet包
MongoDB.Bson - 使用带自定义配置的
JsonReader进行解析,核心是开启AllowShellValues参数,示例代码如下:
using MongoDB.Bson; using MongoDB.Bson.IO; using MongoDB.Bson.Serialization; // 你的原始文本字符串 string str = "你的原始文件内容"; // 配置解析规则,支持Mongo Shell语法 var readerSettings = new JsonReaderSettings { AllowShellValues = true }; // 传入自定义设置进行解析 using var jsonReader = new JsonReader(str, readerSettings); BsonArray resultArray = BsonSerializer.Deserialize<BsonArray>(jsonReader);
效果验证
解析完成后你可以直接操作BsonArray里的元素,无需自定义类映射:
// 取第一个文档的_id值 ObjectId id = resultArray[0].AsBsonDocument["_id"].AsObjectId; // 取UniqueNumber的长整型值 long uniqueNum = resultArray[0].AsBsonDocument["UniqueNumber"].AsInt64;
内容的提问来源于stack exchange,提问作者Витязи Team
相关产品推荐
相关产品推荐

