- 
    Type:
Bug
 - 
    Resolution: Done
 - 
    Priority:
Critical - P2
 - 
    None
 - 
    Affects Version/s: 2.2
 - 
    Component/s: BSON, Serialization
 - 
    None
 - 
    Environment:MongoDB 3.0.7
 
- 
        None
 
- 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 
After migrating form driver 1.x to 2.x (2.2.0), we faced an issue with the
DictionaryInterfaceImplementerSerializer using DictionaryRepresentation.ArrayOfDocuments
where the dictionary is a
Dictionary<MyEnumeration, bool>.
The following stacktrace was generated for some documents:
System.FormatException : An error occurred while deserializing the EnabledForProduct property of class CredMarket.Model.Branch: O valor "0" não é do tipo "CredMarket.Model.Product" e não pode ser usado nesta coleção genérica.
Nome do parâmetro: key
  ----> System.ArgumentException : O valor "0" não é do tipo "CredMarket.Model.Product" e não pode ser usado nesta coleção genérica.
Nome do parâmetro: key
   em MongoDB.Bson.Serialization.BsonClassMapSerializer`1.DeserializeMemberValue(BsonDeserializationContext context, BsonMemberMap memberMap)
   em MongoDB.Bson.Serialization.BsonClassMapSerializer`1.DeserializeClass(BsonDeserializationContext context)
   em MongoDB.Bson.Serialization.BsonClassMapSerializer`1.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
   em MongoDB.Bson.Serialization.IBsonSerializerExtensions.Deserialize(IBsonSerializer`1 serializer, BsonDeserializationContext context)
   em MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.ReplyMessageBinaryEncoder`1.ReadMessage()
   em MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveMessageHelper.DecodeMessage(IByteBuffer buffer, IMessageEncoderSelector encoderSelector, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.Connections.BinaryConnection.ReceiveMessage(Int32 responseTo, IMessageEncoderSelector encoderSelector, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.ConnectionPools.ExclusiveConnectionPool.AcquiredConnection.ReceiveMessage(Int32 responseTo, IMessageEncoderSelector encoderSelector, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.WireProtocol.QueryWireProtocol`1.Execute(IConnection connection, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.Servers.ClusterableServer.ServerChannel.ExecuteProtocol(IWireProtocol`1 protocol, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.Servers.ClusterableServer.ServerChannel.Query(CollectionNamespace collectionNamespace, BsonDocument query, BsonDocument fields, IElementNameValidator queryValidator, Int32 skip, Int32 batchSize, Boolean slaveOk, Boolean partialOk, Boolean noCursorTimeout, Boolean oplogReplay, Boolean tailableCursor, Boolean awaitData, IBsonSerializer`1 serializer, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.Operations.FindOpcodeOperation`1.ExecuteProtocol(IChannelHandle channel, BsonDocument wrappedQuery, Boolean slaveOk, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.Operations.FindOpcodeOperation`1.Execute(IReadBinding binding, CancellationToken cancellationToken)
   em MongoDB.Driver.Core.Operations.FindOperation`1.Execute(IReadBinding binding, CancellationToken cancellationToken)
   em MongoDB.Driver.OperationExecutor.ExecuteReadOperation(IReadBinding binding, IReadOperation`1 operation, CancellationToken cancellationToken)
   em MongoDB.Driver.MongoCollectionImpl`1.ExecuteReadOperation(IReadOperation`1 operation, ReadPreference readPreference, CancellationToken cancellationToken)
   em MongoDB.Driver.MongoCollectionImpl`1.ExecuteReadOperation(IReadOperation`1 operation, CancellationToken cancellationToken)
   em MongoDB.Driver.MongoCollectionImpl`1.FindSync(FilterDefinition`1 filter, FindOptions`2 options, CancellationToken cancellationToken)
   em MongoDB.Driver.FindFluent`2.ToCursor(CancellationToken cancellationToken)
   em MongoDB.Driver.IAsyncCursorSourceExtensions.FirstOrDefault(IAsyncCursorSource`1 source, CancellationToken cancellationToken)
   em MongoDB.Driver.IFindFluentExtensions.FirstOrDefault(IFindFluent`2 find, CancellationToken cancellationToken)
   em CredMarket.Repository.MongoDB.SimpleRepository`1.FindOne(FilterDefinition`1 f) na SimpleRepository.cs: line 99
   em CredMarket.Repository.MongoDB.SimpleRepository`1.GetById(String id) na SimpleRepository.cs: line 105
   em CredMarket.Tests.TestMongoDB2Serialization.TestBranchSerialization() na TestMongoDB2Serialization.cs: line 67
--ArgumentException
   em System.ThrowHelper.ThrowWrongKeyTypeArgumentException(Object key, Type targetType)
   em System.Collections.Generic.Dictionary`2.System.Collections.IDictionary.Add(Object key, Object value)
   em MongoDB.Bson.Serialization.Serializers.DictionarySerializerBase`1.DeserializeArrayRepresentation(BsonDeserializationContext context)
   em MongoDB.Bson.Serialization.Serializers.DictionarySerializerBase`1.DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args)
   em MongoDB.Bson.Serialization.Serializers.ClassSerializerBase`1.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
   em MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
   em MongoDB.Bson.Serialization.IBsonSerializerExtensions.Deserialize(IBsonSerializer serializer, BsonDeserializationContext context)
   em MongoDB.Bson.Serialization.BsonClassMapSerializer`1.DeserializeMemberValue(BsonDeserializationContext context, BsonMemberMap memberMap)
We nailed down the error to documents where the enum was of the underyling bson type "1" (Double). Documents with underlying bson type of "16" (Int 32)
This issue does not happen with the 1.x driver.