diff --git a/src/MongoDB.Bson/Serialization/Serializers/BsonClassMapSerializer.cs b/src/MongoDB.Bson/Serialization/Serializers/BsonClassMapSerializer.cs index e2c7d6dfe6b..4e9df5081e4 100644 --- a/src/MongoDB.Bson/Serialization/Serializers/BsonClassMapSerializer.cs +++ b/src/MongoDB.Bson/Serialization/Serializers/BsonClassMapSerializer.cs @@ -414,7 +414,7 @@ private BsonCreatorMap ChooseBestCreator(Dictionary values) if (creatorMap == null) { - throw new BsonSerializationException("No matching creator found."); + throw new BsonSerializationException($"No matching creator found for class {_classMap.ClassType.FullName}."); } return creatorMap; diff --git a/tests/MongoDB.Bson.Tests/Serialization/BsonClassMapSerializerTests.cs b/tests/MongoDB.Bson.Tests/Serialization/BsonClassMapSerializerTests.cs index f04507eabdf..a9b836302a1 100644 --- a/tests/MongoDB.Bson.Tests/Serialization/BsonClassMapSerializerTests.cs +++ b/tests/MongoDB.Bson.Tests/Serialization/BsonClassMapSerializerTests.cs @@ -39,10 +39,42 @@ public void Deserialize_should_throw_invalidOperationException_when_creator_retu exception.Should().BeOfType(); } + [Fact] + public void Deserialize_should_throw_when_no_creators_found() + { + var bsonClassMap = new BsonClassMap(); + bsonClassMap.AutoMap(); + bsonClassMap.Freeze(); + + var subject = new BsonClassMapSerializer(bsonClassMap); + + using var reader = new JsonReader("{ \"_id\": \"just_an_id\" }"); + var context = BsonDeserializationContext.CreateRoot(reader); + + var exception = Record.Exception(() => subject.Deserialize(context)); + exception.Should().BeOfType() + .Subject.Message.Should().Be($"No matching creator found for class {typeof(ModelWithCtor).FullName}."); + } + // nested classes private class MyModel { public string Id { get; set; } } + + private class ModelWithCtor + { + private readonly string _myId; + private readonly int _i; + + public ModelWithCtor(string id, int i) + { + _myId = id; + _i = i; + } + + public string Id => _myId; + public int I => _i; + } } }