@@ -105,7 +105,9 @@ static IBsonSerializer GetTargetSerializer(UnaryExpression node, Type sourceType
105105 if ( IsConvertToNullableType ( targetType , out var valueType ) )
106106 {
107107 var valueSerializer = valueType == targetType ? sourceSerializer : GetTargetSerializer ( node , sourceType , valueType , sourceSerializer ) ;
108- return valueSerializer != null ? GetConvertToNullableTypeSerializer ( node , sourceType , targetType , valueSerializer ) : null ;
108+ return valueSerializer is null or IUnknowableSerializer
109+ ? valueSerializer
110+ : GetConvertToNullableTypeSerializer ( node , sourceType , targetType , valueSerializer ) ;
109111 }
110112
111113 // from here on we know there are no longer any Nullable<T> types involved
@@ -145,7 +147,7 @@ static IBsonSerializer GetTargetSerializer(UnaryExpression node, Type sourceType
145147 return GetNumericConversionSerializer ( node , sourceType , targetType , sourceSerializer ) ;
146148 }
147149
148- return UnknowableSerializer . Create ( node . Type ) ;
150+ return UnknowableSerializer . Create ( targetType ) ;
149151 }
150152
151153 static IBsonSerializer GetConvertFromBsonValueSerializer ( UnaryExpression expression , Type targetType )
@@ -210,7 +212,9 @@ static IBsonSerializer GetConvertFromNullableTypeSerializer(UnaryExpression expr
210212 if ( targetType . IsNullable ( out var targetValueType ) )
211213 {
212214 var targetValueSerializer = GetTargetSerializer ( expression , sourceValueType , targetValueType , sourceValueSerializer ) ;
213- return NullableSerializer . Create ( targetValueSerializer ) ;
215+ return targetValueSerializer is IUnknowableSerializer
216+ ? targetValueSerializer
217+ : NullableSerializer . Create ( targetValueSerializer ) ;
214218 }
215219 else
216220 {
0 commit comments