2016-07-25 2 views
2

Я пытаюсь создать Bson из Json. Я попытался использовать Json.Net, но, похоже, есть документированное поведение, когда библиотека создает uint64 для целых полей. к сожалению, мы должны использовать uint32.Невозможно наложить объект типа «MongoDB.Bson.BsonDocument» на тип «MongoDB.Bson.BsonBinaryData»

Следовательно, я пытаюсь использовать библиотеку monsodb 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

Для того, чтобы получить сырое представление массива байт в BsonDocument например, использовать метод расширения ToBson(). Чтобы создать BsonDocument из представления массива байтов, создайте экземпляр RawBsonDocument, который получен из BsonDocument и принимает байтовый массив как аргумент конструктора.

Ниже приведен пример использования двух BSON документов для передачи параметров вызова нативного с функцией и получить результат:

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 точки так или иначе должны быть освобождены.

+0

Впечатляет, что эту информацию вы не просто найти! Достаточно того, что до сих пор я не мог найти такого простого решения (за несколько дней поиска), чтобы написать сообщение, которое легко можно найти в Google! большое спасибо – Ibrahim

Смежные вопросы