diff --git a/DigitalData.Core.Security/DIExtensions.cs b/DigitalData.Core.Security/DIExtensions.cs index 644e770..1ecb854 100644 --- a/DigitalData.Core.Security/DIExtensions.cs +++ b/DigitalData.Core.Security/DIExtensions.cs @@ -5,11 +5,23 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; +using System.Text.Json; +using System.Text.Json.Serialization; namespace DigitalData.Core.Security { public static class DIExtensions { + public static JsonSerializerOptions TryAddCryptographerConverter(this JsonSerializerOptions options) + { + if (!options.Converters.OfType().Any()) + options.Converters.Add(new HashAlgorithmNameConverter()); + + if (!options.Converters.OfType().Any()) + options.Converters.Add(new JsonStringEnumConverter()); + return options; + } + private static IServiceCollection AddAsymCryptService(this IServiceCollection services) where TAsymCryptParams : AsymCryptParams { diff --git a/DigitalData.Core.Security/HashAlgorithmNameConverter.cs b/DigitalData.Core.Security/HashAlgorithmNameConverter.cs new file mode 100644 index 0000000..8fe7a53 --- /dev/null +++ b/DigitalData.Core.Security/HashAlgorithmNameConverter.cs @@ -0,0 +1,13 @@ +using System.Security.Cryptography; +using System.Text.Json.Serialization; +using System.Text.Json; + +namespace DigitalData.Core.Security +{ + public class HashAlgorithmNameConverter : JsonConverter + { + public override HashAlgorithmName Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) => new(reader.GetString() ?? string.Empty); + + public override void Write(Utf8JsonWriter writer, HashAlgorithmName value, JsonSerializerOptions options) => writer.WriteStringValue(value.Name); + } +} \ No newline at end of file