From 95b54fa1f15e8391e85d60b5eb33cba3e852525b Mon Sep 17 00:00:00 2001 From: TekH Date: Wed, 10 Sep 2025 15:55:56 +0200 Subject: [PATCH] feat(JsonExtensions): create to be able to make fluent Json serilization --- .../Common/Extensions/JsonExtensions.cs | 18 ++++++++++++++++++ .../DocSigned/DocSignedNotification.cs | 3 ++- .../DocSigned/Handlers/HistoryHandler.cs | 5 +++-- .../Common/Notifications/SendMailHandler.cs | 3 ++- EnvelopeGenerator.Domain/Constants/Format.cs | 15 ++++++--------- .../Controllers/DocumentController.cs | 3 ++- 6 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 EnvelopeGenerator.Application/Common/Extensions/JsonExtensions.cs diff --git a/EnvelopeGenerator.Application/Common/Extensions/JsonExtensions.cs b/EnvelopeGenerator.Application/Common/Extensions/JsonExtensions.cs new file mode 100644 index 00000000..628996ce --- /dev/null +++ b/EnvelopeGenerator.Application/Common/Extensions/JsonExtensions.cs @@ -0,0 +1,18 @@ +using System.Text.Json; + +namespace EnvelopeGenerator.Application.Common.Extensions; + +/// +/// +/// +public static class JsonExtensions +{ + /// + /// + /// + /// + /// + /// + public static string ToJson(this object obj, JsonSerializerOptions? options = null) + => JsonSerializer.Serialize(obj, options); +} \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Common/Notifications/DocSigned/DocSignedNotification.cs b/EnvelopeGenerator.Application/Common/Notifications/DocSigned/DocSignedNotification.cs index 1a2fac67..86e7681d 100644 --- a/EnvelopeGenerator.Application/Common/Notifications/DocSigned/DocSignedNotification.cs +++ b/EnvelopeGenerator.Application/Common/Notifications/DocSigned/DocSignedNotification.cs @@ -1,4 +1,5 @@ using EnvelopeGenerator.Application.Common.Dto.EnvelopeReceiver; +using EnvelopeGenerator.Application.Common.Extensions; using EnvelopeGenerator.Domain.Constants; using MediatR; using Newtonsoft.Json; @@ -27,7 +28,7 @@ public record DocSignedNotification(EnvelopeReceiverDto Original) : EnvelopeRece /// public string EmailAddress => Receiver?.EmailAddress ?? throw new InvalidOperationException($"Receiver is null." + - $"DocSignedNotification:\n{JsonConvert.SerializeObject(this, Format.Json.ForDiagnostics)}"); + $"DocSignedNotification:\n{this.ToJson(Format.Json.ForDiagnostics)}"); } /// diff --git a/EnvelopeGenerator.Application/Common/Notifications/DocSigned/Handlers/HistoryHandler.cs b/EnvelopeGenerator.Application/Common/Notifications/DocSigned/Handlers/HistoryHandler.cs index 409edf59..cac9aa81 100644 --- a/EnvelopeGenerator.Application/Common/Notifications/DocSigned/Handlers/HistoryHandler.cs +++ b/EnvelopeGenerator.Application/Common/Notifications/DocSigned/Handlers/HistoryHandler.cs @@ -1,4 +1,5 @@ -using EnvelopeGenerator.Application.Histories.Commands; +using EnvelopeGenerator.Application.Common.Extensions; +using EnvelopeGenerator.Application.Histories.Commands; using EnvelopeGenerator.Domain.Constants; using MediatR; using Newtonsoft.Json; @@ -31,7 +32,7 @@ public class HistoryHandler : INotificationHandler { if(notification.Receiver is null) if (notification.Receiver is null) - throw new InvalidOperationException($"Receiver information is missing in the notification. DocSignedNotification:\n {JsonConvert.SerializeObject(notification, Format.Json.ForDiagnostics)}"); + throw new InvalidOperationException($"Receiver information is missing in the notification. DocSignedNotification:\n {notification.ToJson(Format.Json.ForDiagnostics)}"); await _sender.Send(new CreateHistoryCommand() { diff --git a/EnvelopeGenerator.Application/Common/Notifications/SendMailHandler.cs b/EnvelopeGenerator.Application/Common/Notifications/SendMailHandler.cs index 121b485e..1e6fd790 100644 --- a/EnvelopeGenerator.Application/Common/Notifications/SendMailHandler.cs +++ b/EnvelopeGenerator.Application/Common/Notifications/SendMailHandler.cs @@ -1,6 +1,7 @@ using DigitalData.Core.Abstraction.Application.Repository; using DigitalData.EmailProfilerDispatcher.Abstraction.Entities; using EnvelopeGenerator.Application.Common.Configurations; +using EnvelopeGenerator.Application.Common.Extensions; using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Entities; using MediatR; @@ -101,7 +102,7 @@ public abstract class SendMailHandler : INotificationHandler x.Name == notification.TemplateType.ToString(), cancel) ?? throw new InvalidOperationException($"Receiver information is missing in the notification." + - $"{typeof(TNotification)}:\n {JsonConvert.SerializeObject(notification, Format.Json.ForDiagnostics)}"); + $"{typeof(TNotification)}:\n {notification.ToJson(Format.Json.ForDiagnostics)}"); temp.Subject = ReplacePlaceHolders(temp.Subject, placeHolders, MailParams.Placeholders); diff --git a/EnvelopeGenerator.Domain/Constants/Format.cs b/EnvelopeGenerator.Domain/Constants/Format.cs index 88f30f32..822eb820 100644 --- a/EnvelopeGenerator.Domain/Constants/Format.cs +++ b/EnvelopeGenerator.Domain/Constants/Format.cs @@ -1,6 +1,4 @@ -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; -#if NET +#if NET using System.Text.Json; using System.Text.Json.Serialization; #endif @@ -12,15 +10,14 @@ namespace EnvelopeGenerator.Domain.Constants #region Json Serializer Settings public static class Json { - //TODO: update to use System.Text.Json - public static readonly JsonSerializerSettings ForDiagnostics = new JsonSerializerSettings() +#if NET + public static readonly JsonSerializerOptions ForDiagnostics = new() { - ContractResolver = new CamelCasePropertyNamesContractResolver(), - Formatting = Formatting.Indented, - NullValueHandling = NullValueHandling.Include + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true, + DefaultIgnoreCondition = JsonIgnoreCondition.Never }; -#if NET public static readonly JsonSerializerOptions ForAnnotations = new() { PropertyNamingPolicy = JsonNamingPolicy.CamelCase, diff --git a/EnvelopeGenerator.Web/Controllers/DocumentController.cs b/EnvelopeGenerator.Web/Controllers/DocumentController.cs index 065a914a..8e00c921 100644 --- a/EnvelopeGenerator.Web/Controllers/DocumentController.cs +++ b/EnvelopeGenerator.Web/Controllers/DocumentController.cs @@ -1,4 +1,5 @@ using DigitalData.Core.Exceptions; +using EnvelopeGenerator.Application.Common.Extensions; using EnvelopeGenerator.Application.EnvelopeReceivers.Queries; using EnvelopeGenerator.Domain.Constants; using MediatR; @@ -33,7 +34,7 @@ public class DocumentController : ControllerBase if(byteData is null || byteData.Length == 0) { _logger.LogError("Document byte data is null or empty for envelope-receiver entity:\n{envelopeKey}.", - JsonConvert.SerializeObject(envRcv, Format.Json.ForDiagnostics)); + envRcv.ToJson(Format.Json.ForDiagnostics)); throw new NotFoundException("Document is empty."); }