无法将类型为'MongoDB.Bson.BsonDocument'的对象强制转换为'MongoDB.Bson.BsonBinaryData'

时间:2016-07-25 13:38:55

标签: .net mongodb bson

我正试图从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;

1 个答案:

答案 0 :(得分:1)

要获取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);
}

请注意,必须以某种方式释放内存p