How to deserialize a BsonDocument object back to class

iefpw picture iefpw · Feb 28, 2012 · Viewed 48.3k times · Source

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?

Answer

Andrew Orsich picture Andrew Orsich · Feb 28, 2012

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.