使用BsonBinaryWriter的WriteInt32报错:仅能在Name状态调用WriteName
解决BsonBinaryWriter写入int时的"WriteName can only be called when State is Name, not when State is Initial"异常
这个报错的核心原因是BsonBinaryWriter有严格的状态流转规则:初始状态(Initial)下无法直接写入带键名的字段,必须先开启一个BSON文档,让writer进入可处理键值对的状态。
修正后的代码如下:
using MongoDB.Bson; using MongoDB.Bson.IO; using System.IO; // 创建写入器及流 using var stream = new MemoryStream(); using var writer = new BsonBinaryWriter(stream); // 启动根文档,切换writer状态至可写入键值对 writer.WriteStartDocument(); // 此时可正常写入带键名的int字段 writer.WriteInt32("t", 1); // 结束文档,保证BSON结构完整 writer.WriteEndDocument();
关键操作说明:
WriteStartDocument():将writer从Initial状态切换到Document状态,解锁键值对写入权限WriteEndDocument():收尾BSON文档结构,避免后续解析或处理时出现格式错误
内容的提问来源于stack exchange,提问作者QQQQq
相关产品推荐
相关产品推荐

