@@ -48,7 +48,7 @@ public static BsonValue SerializeValue(this ISerializationExpression field, obje
48
48
{
49
49
Ensure . IsNotNull ( field , nameof ( field ) ) ;
50
50
51
- value = ConvertEnumIfNecessary ( field . Serializer . ValueType , value ) ;
51
+ value = ConvertIfNecessary ( field . Serializer . ValueType , value ) ;
52
52
53
53
var tempDocument = new BsonDocument ( ) ;
54
54
using ( var bsonWriter = new BsonDocumentWriter ( tempDocument ) )
@@ -73,7 +73,7 @@ public static BsonArray SerializeValues(this ISerializationExpression field, IEn
73
73
bsonWriter . WriteStartArray ( ) ;
74
74
foreach ( var value in values )
75
75
{
76
- field . Serializer . Serialize ( context , ConvertEnumIfNecessary ( field . Serializer . ValueType , value ) ) ;
76
+ field . Serializer . Serialize ( context , ConvertIfNecessary ( field . Serializer . ValueType , value ) ) ;
77
77
}
78
78
bsonWriter . WriteEndArray ( ) ;
79
79
bsonWriter . WriteEndDocument ( ) ;
@@ -96,18 +96,25 @@ private static string CombineFieldNames(string prefix, string suffix)
96
96
return prefix + "." + suffix ;
97
97
}
98
98
99
- private static object ConvertEnumIfNecessary ( Type valueType , object value )
99
+ private static object ConvertIfNecessary ( Type targetType , object value )
100
100
{
101
- if ( valueType . IsEnum || valueType . IsNullableEnum ( ) )
101
+ if ( targetType . IsEnum || targetType . IsNullableEnum ( ) )
102
102
{
103
103
if ( value != null )
104
104
{
105
- if ( valueType . IsNullableEnum ( ) )
105
+ if ( targetType . IsNullableEnum ( ) )
106
106
{
107
- valueType = valueType . GetNullableUnderlyingType ( ) ;
107
+ targetType = targetType . GetNullableUnderlyingType ( ) ;
108
108
}
109
109
110
- value = Enum . ToObject ( valueType , value ) ;
110
+ value = Enum . ToObject ( targetType , value ) ;
111
+ }
112
+ }
113
+ else if ( targetType != typeof ( BsonValue ) && ! targetType . IsNullable ( ) )
114
+ {
115
+ if ( value != null && targetType != value . GetType ( ) )
116
+ {
117
+ value = Convert . ChangeType ( value , targetType ) ;
111
118
}
112
119
}
113
120
0 commit comments