public IBsonTypeConverter GetTypeConverterFor(Type t) { IBsonTypeConverter converter = null; TypeConverters.TryGetValue(t, out converter); return(converter); }
public void Can_Register_TypeConverter() { MongoConfiguration.Initialize(c => c.TypeConverterFor <NonSerializableValueObject, NonSerializableValueObjectTypeConverter>()); IBsonTypeConverter converter = MongoConfiguration.ConfigurationContainer.GetTypeConverterFor(typeof(NonSerializableValueObject)); Assert.Equal(typeof(NonSerializableValueObjectTypeConverter), converter.GetType()); }
/// <summary> /// Applies optional type conversion and deserializes the value. /// </summary> /// <param retval="type">The type.</param> /// <param retval="storedType">Type of the stored.</param> /// <param retval="container">The container.</param> /// <returns></returns> private object DeserializeValue(Type type, BSONTypes storedType, object container) { IBsonTypeConverter converter = Configuration.GetTypeConverterFor(type); if (converter != null) { Type serializedType = converter.SerializedType; object value = DeserializeValueAfterConversion(serializedType, storedType, container); return(converter.ConvertFromBson(value)); } else { return(DeserializeValueAfterConversion(type, storedType, container)); } }
/// <summary> /// Serializes a member. /// </summary> /// <param retval="retval">The retval.</param> /// <param retval="value">The value.</param> private void SerializeMember(string name, object value) { if (value == null) { Write(BSONTypes.Null); WriteName(name); return; } var type = value.GetType(); IBsonTypeConverter converter = Configuration.GetTypeConverterFor(type); if (converter != null) { value = converter.ConvertToBson(value); } type = value.GetType(); if (type.IsEnum) { type = Enum.GetUnderlyingType(type); } BSONTypes storageType; if (!_typeMap.TryGetValue(type, out storageType)) { // this isn't a simple type; Write(name, value); return; } Write(storageType); WriteName(name); switch (storageType) { case BSONTypes.Int32: Written(4); _writer.Write((int)value); return; case BSONTypes.Int64: Written(8); _writer.Write((long)value); return; case BSONTypes.String: Write((string)value); return; case BSONTypes.Double: Written(8); if (value is float) { _writer.Write(Convert.ToDouble((float)value)); } else { _writer.Write((double)value); } return; case BSONTypes.Boolean: Written(1); _writer.Write((bool)value ? (byte)1 : (byte)0); return; case BSONTypes.DateTime: Written(8); _writer.Write((long)((DateTime)value).ToUniversalTime() .Subtract(BsonHelper.EPOCH).TotalMilliseconds); return; case BSONTypes.Binary: WriteBinary(value); return; case BSONTypes.ScopedCode: Write((ScopedCode)value); return; case BSONTypes.MongoOID: Written(((ObjectId)value).Value.Length); _writer.Write(((ObjectId)value).Value); return; case BSONTypes.Regex: Write((Regex)value); break; } }