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); } } }
/// <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); }