Hi everyone I have a problem. The my problem is can not serialize bson document dictionary of dictionary. How can i serialize bson document dictionary.
public Dictionary<Symbols, Dictionary<int, decimal>> SymbolCoinRates { get; set; }
= new();
Error message is like below
MongoDB.Bson.BsonSerializationException: When using DictionaryRepresentation.Document key values must serialize as strings. at MongoDB.Bson.Serialization.Serializers.DictionarySerializerBase
3.SerializeKeyString(TKey key) at MongoDB.Bson.Serialization.Serializers.DictionarySerializerBase
3.SerializeDocumentRepresentation(BsonSerializationContext context, TDictionary value) at MongoDB.Bson.Serialization.Serializers.DictionarySerializerBase3.SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, TDictionary value) at MongoDB.Bson.Serialization.Serializers.ClassSerializerBase
1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TValue value) at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Serialize[TValue](IBsonSerializer1 serializer, BsonSerializationContext context, TValue value) at MongoDB.Bson.Serialization.Serializers.DictionarySerializerBase
3.SerializeArrayOfDocumentsRepresentation(BsonSerializationContext context, TDictionary value) at MongoDB.Bson.Serialization.Serializers.DictionarySerializerBase3.SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, TDictionary value) at MongoDB.Bson.Serialization.Serializers.ClassSerializerBase
1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TValue value) at MongoDB.Bson.Serialization.Serializers.SerializerBase1.MongoDB.Bson.Serialization.IBsonSerializer.Serialize(BsonSerializationContext context, BsonSerializationArgs args, Object value) at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Serialize(IBsonSerializer serializer, BsonSerializationContext context, Object value) at MongoDB.Bson.Serialization.BsonClassMapSerializer
1.SerializeNormalMember(BsonSerializationContext context, Object obj, BsonMemberMap memberMap) at MongoDB.Bson.Serialization.BsonClassMapSerializer1.SerializeMember(BsonSerializationContext context, Object obj, BsonMemberMap memberMap) at MongoDB.Bson.Serialization.BsonClassMapSerializer
1.SerializeClass(BsonSerializationContext context, BsonSerializationArgs args, TClass document) at MongoDB.Bson.Serialization.BsonClassMapSerializer1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TClass value) at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Serialize[TValue](IBsonSerializer
1 serializer, BsonSerializationContext context, TValue value) at MongoDB.Driver.OperatorUpdateDefinition2.Render(IBsonSerializer
1 documentSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider) at MongoDB.Driver.CombinedUpdateDefinition1.Render(IBsonSerializer
1 documentSerializer, IBsonSerializerRegistry serializerRegistry, LinqProvider linqProvider) at MongoDB.Driver.MongoCollectionImpl1.ConvertWriteModelToWriteRequest(WriteModel
1 model, Int32 index) at System.Linq.Enumerable.SelectIterator[TSource,TResult](IEnumerable1 source, Func
3 selector)+MoveNext() at System.Collections.Generic.List1..ctor(IEnumerable
1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable1 source) at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation..ctor(CollectionNamespace collectionNamespace, IEnumerable
1 requests, MessageEncoderSettings messageEncoderSettings) at MongoDB.Driver.MongoCollectionImpl1.CreateBulkWriteOperation(IClientSessionHandle session, IEnumerable
1 requests, BulkWriteOptions options) at MongoDB.Driver.MongoCollectionImpl1.BulkWriteAsync(IClientSessionHandle session, IEnumerable
1 requests, BulkWriteOptions options, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionImpl1.UsingImplicitSessionAsync[TResult](Func
2 funcAsync, CancellationToken cancellationToken) at MongoDB.Driver.MongoCollectionBase1.UpdateOneAsync(FilterDefinition
1 filter, UpdateDefinition1 update, UpdateOptions options, Func
3 bulkWriteAsync) at Dev360.Domain.Context.MongoDb1.UpdateOneAsync(FilterDefinition
1 filter, Func2 update, UpdateOptions options, CancellationToken cancellationToken) in C:\Dev360\SlotBase\Core\Dev360.Domain\Context\MongoDbRepository.cs:line 110 at Dev360.GameEngine.Api.Features.Commands.Modes.GameModeCommandHandler.Handle(GameModeCommand request, CancellationToken cancellationToken) in C:\Dev360\SlotBase\Apis\Dev360.GameEngine.Api\Features\Commands\Modes\GameModeCommand.cs:line 43 at MediatR.Pipeline.RequestExceptionProcessorBehavior
2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate1 next) at MediatR.Pipeline.RequestExceptionProcessorBehavior
2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate1 next) at MediatR.Pipeline.RequestExceptionActionProcessorBehavior
2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate1 next) at MediatR.Pipeline.RequestExceptionActionProcessorBehavior
2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate1 next) at MediatR.Pipeline.RequestPostProcessorBehavior
2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate1 next) at MediatR.Pipeline.RequestPreProcessorBehavior
2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate1 next) at Dev360.GameEngine.Api.Controllers.ModesController.UpdateAsync(GameModeCommand gameModeCommand) in C:\Dev360\SlotBase\Apis\Dev360.GameEngine.Api\Controllers\ModesController.cs:line 48 at lambda_method561(Closure , Object ) at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask
1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)HEADERS ======= Accept: / Connection: keep-alive Host: localhost:7266 User-Agent: PostmanRuntime/7.29.2 Accept-Encoding: gzip, deflate, br Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImN0eSI6IkpXVCJ9.eyJjc2NvZGUiOiJMTEFJIiwidW5pcXVlX25hbWUiOiJHdWVzdC4iLCJuYmYiOjE2NTk0NDQwMzIsImV4cCI6MTY2MDA0ODgzMiwiaWF0IjoxNjU5NDQ0MDMyLCJpc3MiOiJEZXYzNjAuU2xvdC5BcGkiLCJhdWQiOiJEZXYzNjAuU2xvdCJ9.fmT2z84YT3gZVZX04JrU0c95btGhLFJqgkSb2yHnGDM Cache-Control: no-cache Content-Type: application/json traceparent: 00-68a5cd84c23d6cd77b2f35eb5712ef80-c8bb294477e2b897-00 Content-Length: 3556 Postman-Token: c7907ebe-e340-402e-b438-eb5e83ca1564 ApplicationId: AppId ApplicationType: AppType ExchangeId: ExchangeId UserId: LLAI
Its solved I search so much for a solution but I dont find a solution. Because I seperate dictionary of dictionary array to in new class and two property. One prorety is Symbol type and other property is dictioary proprerty.
public class SymbolCoinRate
{
public Symbols Symbol { get; set; }
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfArrays)]
public Dictionary<int,decimal> CoinRate { get; set; }
}