From e5898dbfe7fca892d8c01f212405a937edb67b2a Mon Sep 17 00:00:00 2001 From: Maksym Sadovnychyy Date: Mon, 9 Jun 2025 22:51:58 +0200 Subject: [PATCH] (feature): Dictionary> serializer --- .../MaksIT.MongoDB.Linq.Tests.csproj | 4 +-- .../MaksIT.MongoDB.Linq.csproj | 2 +- .../GuidKeyDictionarySerializer.cs | 30 +++++++++++++++++++ 3 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 src/MaksIT.MongoDB.Linq/Serializers/GuidKeyDictionarySerializer.cs diff --git a/src/MaksIT.MongoDB.Linq.Tests/MaksIT.MongoDB.Linq.Tests.csproj b/src/MaksIT.MongoDB.Linq.Tests/MaksIT.MongoDB.Linq.Tests.csproj index 7d9a536..a6fcbc2 100644 --- a/src/MaksIT.MongoDB.Linq.Tests/MaksIT.MongoDB.Linq.Tests.csproj +++ b/src/MaksIT.MongoDB.Linq.Tests/MaksIT.MongoDB.Linq.Tests.csproj @@ -16,9 +16,9 @@ - + - + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/src/MaksIT.MongoDB.Linq/MaksIT.MongoDB.Linq.csproj b/src/MaksIT.MongoDB.Linq/MaksIT.MongoDB.Linq.csproj index b019ef2..aed4c0b 100644 --- a/src/MaksIT.MongoDB.Linq/MaksIT.MongoDB.Linq.csproj +++ b/src/MaksIT.MongoDB.Linq/MaksIT.MongoDB.Linq.csproj @@ -8,7 +8,7 @@ MaksIT.MongoDB.Linq - 1.1.0 + 1.1.1 Maksym Sadovnychyy MAKS-IT MaksIT.MongoDB.Linq diff --git a/src/MaksIT.MongoDB.Linq/Serializers/GuidKeyDictionarySerializer.cs b/src/MaksIT.MongoDB.Linq/Serializers/GuidKeyDictionarySerializer.cs new file mode 100644 index 0000000..f446fdf --- /dev/null +++ b/src/MaksIT.MongoDB.Linq/Serializers/GuidKeyDictionarySerializer.cs @@ -0,0 +1,30 @@ +using MongoDB.Bson; +using MongoDB.Bson.IO; +using MongoDB.Bson.Serialization; +using MongoDB.Bson.Serialization.Serializers; + + +namespace MaksIT.MaksIT.MongoDB.Linq.Serializers; + +public class GuidKeyDictionarySerializer : SerializerBase> { + public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Dictionary value) { + context.Writer.WriteStartDocument(); + foreach (var kvp in value) { + context.Writer.WriteName(kvp.Key.ToString()); // Convert Guid key to string + BsonSerializer.Serialize(context.Writer, kvp.Value); + } + context.Writer.WriteEndDocument(); + } + + public override Dictionary Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) { + var dictionary = new Dictionary(); + context.Reader.ReadStartDocument(); + while (context.Reader.ReadBsonType() != BsonType.EndOfDocument) { + var key = Guid.Parse(context.Reader.ReadName()); + var value = BsonSerializer.Deserialize(context.Reader); + dictionary.Add(key, value); + } + context.Reader.ReadEndDocument(); + return dictionary; + } +}