private void SerializeMember(BsonWriter bsonWriter, object obj, BsonMemberMap memberMap)
        {
            object objA = memberMap.Getter(obj);

            if (objA == null && memberMap.IgnoreIfNull || (memberMap.HasDefaultValue && !memberMap.SerializeDefaultValue && object.Equals(objA, memberMap.DefaultValue) || !memberMap.ShouldSerializeMethod(obj)))
            {
                return;
            }
            bsonWriter.WriteName(memberMap.ElementName);
            Type memberType = memberMap.MemberType;
            Type actualType = objA == null ? memberType : objA.GetType();

            if (IsRelation(memberMap))
            {
                ValidateVirtualRelation(memberMap);
            }
            memberMap.GetSerializer(actualType).Serialize(bsonWriter, memberType, objA, memberMap.SerializationOptions);
        }