private void DeserializeExtraElement(
BsonReader bsonReader,
object obj,
string elementName,
BsonMemberMap extraElementsMemberMap)
{
if (extraElementsMemberMap.MemberType == typeof(BsonDocument))
{
var extraElements = (BsonDocument)extraElementsMemberMap.Getter(obj);
if (extraElements == null)
{
extraElements = new BsonDocument();
extraElementsMemberMap.Setter(obj, extraElements);
}
var bsonValue = (BsonValue)BsonValueSerializer.Instance.Deserialize(bsonReader, typeof(BsonValue), null);
extraElements[elementName] = bsonValue;
}
else
{
var extraElements = (IDictionary<string, object>)extraElementsMemberMap.Getter(obj);
if (extraElements == null)
{
if (extraElementsMemberMap.MemberType == typeof(IDictionary<string, object>))
{
extraElements = new Dictionary<string, object>();
}
else
{
extraElements = (IDictionary<string, object>)Activator.CreateInstance(extraElementsMemberMap.MemberType);
}
extraElementsMemberMap.Setter(obj, extraElements);
}
var bsonValue = (BsonValue)BsonValueSerializer.Instance.Deserialize(bsonReader, typeof(BsonValue), null);
extraElements[elementName] = BsonTypeMapper.MapToDotNetValue(bsonValue);
}
}