private void SerializeExtraElements(BsonSerializationContext context, object obj, BsonMemberMap extraElementsMemberMap)
        {
            var bsonWriter = context.Writer;

            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);
                        context.SerializeWithChildContext(BsonValueSerializer.Instance, element.Value);
                    }
                }
                else
                {
                    var dictionary = (IDictionary <string, object>)extraElements;
                    foreach (var key in dictionary.Keys)
                    {
                        bsonWriter.WriteName(key);
                        var value     = dictionary[key];
                        var bsonValue = BsonTypeMapper.MapToBsonValue(value);
                        context.SerializeWithChildContext(BsonValueSerializer.Instance, bsonValue);
                    }
                }
            }
        }
        private void SerializeNormalMember(BsonSerializationContext context, object obj, BsonMemberMap memberMap)
        {
            var bsonWriter = context.Writer;

            var value = memberMap.Getter(obj);

            if (!memberMap.ShouldSerialize(obj, value))
            {
                return; // don't serialize member
            }

            bsonWriter.WriteName(memberMap.ElementName);
            context.SerializeWithChildContext(memberMap.GetSerializer(), value);
        }
        private void SerializeDiscriminator(BsonSerializationContext context, object obj)
        {
            var discriminatorConvention = _classMap.GetDiscriminatorConvention();

            if (discriminatorConvention != null)
            {
                var actualType    = obj.GetType();
                var discriminator = discriminatorConvention.GetDiscriminator(context.NominalType, actualType);
                if (discriminator != null)
                {
                    context.Writer.WriteName(discriminatorConvention.ElementName);
                    context.SerializeWithChildContext(BsonValueSerializer.Instance, discriminator);
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Serializes a value.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="value">The object.</param>
        protected override void SerializeValue(BsonSerializationContext context, TClass value)
        {
            var backingDocument = ((BsonDocumentBackedClass)value).BackingDocument;

            context.SerializeWithChildContext(BsonDocumentSerializer.Instance, backingDocument);
        }