Search code examples
c#mongodbmongodb-.net-driver

How to deserialize a BsonDocument object back to class


How do I deserialize a BsonDocument object back to the class after getting it from the server?

QueryDocument _document = new QueryDocument("key", "value");
MongoCursor<BsonDocument> _documentsReturned = _collection.FindAs<BsonDocument>(_document);

foreach (BsonDocument _document1 in _documentsReturned)
{
    //deserialize _document1
    //?
}

Do I deserialize using a BsonReader?


Solution

  • There are three ways actually:

    1.Specify type you want to load directly in FindAs<>

    var docs = _collection.FindAs<MyType>(_document);
    

    2.Deserialize document via BsonSerializer:

    BsonSerializer.Deserialize<MyType>(doc);
    

    3.Map bson document manually to your class:

    var myClass = new Mytype();
    myClass.Name = bsonDoc["name"].AsString;
    

    For most cases you are okay with first approach. But sometimes, when your documents is unstructured, you may need third approach.