private void SerializeExtraElements(BsonWriter bsonWriter, object obj, BsonMemberMap extraElementsMemberMap)
{
var extraElements = extraElementsMemberMap.Getter(obj);
if (extraElements != null)
{
if (extraElementsMemberMap.MemberType == typeof(BsonDocument))
{
var bsonDocument = (BsonDocument)extraElements;
foreach (var element in bsonDocument)
{
bsonWriter.WriteName(element.Name);
BsonValueSerializer.Instance.Serialize(bsonWriter, typeof(BsonValue), element.Value, null);
}
}
else
{
var dictionary = (IDictionary<string, object>)extraElements;
foreach (var key in dictionary.Keys)
{
bsonWriter.WriteName(key);
var value = dictionary[key];
if (value == null)
{
bsonWriter.WriteNull();
}
else
{
var bsonValue = BsonTypeMapper.MapToBsonValue(dictionary[key]);
BsonValueSerializer.Instance.Serialize(bsonWriter, typeof(BsonValue), bsonValue, null);
}
}
}
}
}