Anapher/Strive

View on GitHub
src/Services/ConferenceManagement/Strive.Infrastructure/Serialization/JTokenBsonSerializer.cs

Summary

Maintainability
A
0 mins
Test Coverage
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Bson.Serialization.Serializers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace Strive.Infrastructure.Serialization
{
    public class JTokenBsonSerializer : SerializerBase<JValue?>
    {
        public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, JValue? value)
        {
            if (value == null)
                context.Writer.WriteNull();
            else context.Writer.WriteString(value.ToString(Formatting.None));
        }

        public override JValue? Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var type = context.Reader.GetCurrentBsonType();
            if (type == BsonType.String)
            {
                var s = context.Reader.ReadString();
                return (JValue) JToken.Parse(s);
            }

            return null;
        }
    }
}