Skip to content

Commit 43f9917

Browse files
authored
CSHARP-4634: Error in LINQ3 provider when custom ObjectSerializer is used (#1080)
1 parent b6190b5 commit 43f9917

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/MongoDB.Bson/Serialization/Serializers/DiscriminatedInterfaceSerializer.cs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ private static IBsonSerializer<TInterface> CreateInterfaceSerializer()
4848
/// Initializes a new instance of the <see cref="DiscriminatedInterfaceSerializer{TInterface}" /> class.
4949
/// </summary>
5050
public DiscriminatedInterfaceSerializer()
51-
: this(BsonSerializer.LookupDiscriminatorConvention(typeof(TInterface)))
51+
: this(discriminatorConvention: null)
5252
{
5353
}
5454

@@ -80,8 +80,20 @@ public DiscriminatedInterfaceSerializer(IDiscriminatorConvention discriminatorCo
8080
}
8181

8282
_interfaceType = typeof(TInterface);
83-
_discriminatorConvention = discriminatorConvention;
84-
_objectSerializer = ((ObjectSerializer)BsonSerializer.LookupSerializer<object>()).WithDiscriminatorConvention(_discriminatorConvention);
83+
_discriminatorConvention = discriminatorConvention ?? BsonSerializer.LookupDiscriminatorConvention(typeof(TInterface));
84+
_objectSerializer = BsonSerializer.LookupSerializer<object>();
85+
if (_objectSerializer is ObjectSerializer standardObjectSerializer)
86+
{
87+
_objectSerializer = standardObjectSerializer.WithDiscriminatorConvention(_discriminatorConvention);
88+
}
89+
else
90+
{
91+
if (discriminatorConvention != null)
92+
{
93+
throw new BsonSerializationException("Can't set discriminator convention on custom object serializer.");
94+
}
95+
}
96+
8597
_interfaceSerializer = interfaceSerializer;
8698
}
8799

0 commit comments

Comments
 (0)