我正在尝试从json生成bson。我试过使用json.net,但似乎有一个记录在案的行为,库为整型字段生成uint64。不幸的是,我们必须使用uint32。
因此我尝试使用MongoDB BSON库。但我不知道如何将bsondocument转换为bsonBinaryData。
//Works well, I can inspect with watch
MongoDB.Bson.BsonDocument doc = MongoDB.Bson.BsonDocument.Parse(json);
//Invalid cast exception
byte[] data = doc.AsByteArray;
最佳答案
要获取BsonDocument
实例的原始字节数组表示,请使用扩展方法ToBson()
。要从字节数组表示创建BsonDocument
,请创建RawBsonDocument
的实例,该实例派生自BsonDocument
,并将字节数组作为构造函数参数。
下面是使用两个bson文档将参数传递给本机c函数调用并检索结果的示例:
public static BsonDocument CallCFunction(BsonDocument doc) {
byte[] input = doc.ToBson();
int length = input.Length;
IntPtr p = DllImportClass.CFunction(ref length, input);
if (p == IntPtr.Zero) {
// handle error
}
// the value of length is changed in the c function
var output = new byte[length];
System.Runtime.InteropServices.Marshal.Copy(p, output, 0, length);
return new RawBsonDocument(output);
}
注意,必须以某种方式释放指向的内存。