You can get just part of a result document as a BsonDocument by using
the SetFields method of the cursor. Here's an example to get just the
HomeAddress of a Student:
var query = Query.EQ("_id", student.Id);
var fields = Fields.Include("HomeAddress");
var document =
collection.FindAs<BsonDocument>(query).SetFields(fields).SetLimit(1).FirstOrDefault();
You can further deserialize that result into a C# object of type
Address (using the classes in the sample code):
var address =
BsonSerializer.Deserialize<Address>(document["HomeAddress"].AsBsonDocument);
Note that you have to pass the value of "HomeAddress" to Deserialize,
not the entire document.
You can serialize an object to a BSON byte stream and back using:
byte[] bson = student.ToBson();
student = BsonSerializer.Deserialize<Student>(bson);