Skip to content

Commit a2adbda

Browse files
committed
Address IUnknowableSerializer paths not gated by IsKnown & fix return type
1 parent db6e260 commit a2adbda

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

src/MongoDB.Driver/Linq/Linq3Implementation/SerializerFinders/SerializerFinderVisitUnary.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)