using System.Text.Json; using Azure.Core.Serialization; using Microsoft.Azure.Cosmos; namespace Bit.Core.Utilities; // ref: https://github.com/Azure/azure-cosmos-dotnet-v3/blob/master/Microsoft.Azure.Cosmos.Samples/Usage/SystemTextJson/CosmosSystemTextJsonSerializer.cs public class SystemTextJsonCosmosSerializer : CosmosSerializer { private readonly JsonObjectSerializer _systemTextJsonSerializer; public SystemTextJsonCosmosSerializer(JsonSerializerOptions jsonSerializerOptions) { _systemTextJsonSerializer = new JsonObjectSerializer(jsonSerializerOptions); } public override T FromStream(Stream stream) { using (stream) { if (stream.CanSeek && stream.Length == 0) { return default; } if (typeof(Stream).IsAssignableFrom(typeof(T))) { return (T)(object)stream; } return (T)_systemTextJsonSerializer.Deserialize(stream, typeof(T), default); } } public override Stream ToStream(T input) { var streamPayload = new MemoryStream(); _systemTextJsonSerializer.Serialize(streamPayload, input, input.GetType(), default); streamPayload.Position = 0; return streamPayload; } }