feat(JsonExtensions): create to be able to make fluent Json serilization

This commit is contained in:
tekh 2025-09-10 15:55:56 +02:00
parent e990a466aa
commit 95b54fa1f1
6 changed files with 33 additions and 14 deletions

View File

@ -0,0 +1,18 @@
using System.Text.Json;
namespace EnvelopeGenerator.Application.Common.Extensions;
/// <summary>
///
/// </summary>
public static class JsonExtensions
{
/// <summary>
///
/// </summary>
/// <param name="obj"></param>
/// <param name="options"></param>
/// <returns></returns>
public static string ToJson(this object obj, JsonSerializerOptions? options = null)
=> JsonSerializer.Serialize(obj, options);
}

View File

@ -1,4 +1,5 @@
using EnvelopeGenerator.Application.Common.Dto.EnvelopeReceiver; using EnvelopeGenerator.Application.Common.Dto.EnvelopeReceiver;
using EnvelopeGenerator.Application.Common.Extensions;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using MediatR; using MediatR;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -27,7 +28,7 @@ public record DocSignedNotification(EnvelopeReceiverDto Original) : EnvelopeRece
/// </summary> /// </summary>
public string EmailAddress => Receiver?.EmailAddress public string EmailAddress => Receiver?.EmailAddress
?? throw new InvalidOperationException($"Receiver is null." + ?? throw new InvalidOperationException($"Receiver is null." +
$"DocSignedNotification:\n{JsonConvert.SerializeObject(this, Format.Json.ForDiagnostics)}"); $"DocSignedNotification:\n{this.ToJson(Format.Json.ForDiagnostics)}");
} }
/// <summary> /// <summary>

View File

@ -1,4 +1,5 @@
using EnvelopeGenerator.Application.Histories.Commands; using EnvelopeGenerator.Application.Common.Extensions;
using EnvelopeGenerator.Application.Histories.Commands;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using MediatR; using MediatR;
using Newtonsoft.Json; using Newtonsoft.Json;
@ -31,7 +32,7 @@ public class HistoryHandler : INotificationHandler<DocSignedNotification>
{ {
if(notification.Receiver is null) if(notification.Receiver is null)
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() await _sender.Send(new CreateHistoryCommand()
{ {

View File

@ -1,6 +1,7 @@
using DigitalData.Core.Abstraction.Application.Repository; using DigitalData.Core.Abstraction.Application.Repository;
using DigitalData.EmailProfilerDispatcher.Abstraction.Entities; using DigitalData.EmailProfilerDispatcher.Abstraction.Entities;
using EnvelopeGenerator.Application.Common.Configurations; using EnvelopeGenerator.Application.Common.Configurations;
using EnvelopeGenerator.Application.Common.Extensions;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using EnvelopeGenerator.Domain.Entities; using EnvelopeGenerator.Domain.Entities;
using MediatR; using MediatR;
@ -101,7 +102,7 @@ public abstract class SendMailHandler<TNotification> : INotificationHandler<TNot
.ReadOnly() .ReadOnly()
.SingleOrDefaultAsync(x => x.Name == notification.TemplateType.ToString(), cancel) .SingleOrDefaultAsync(x => x.Name == notification.TemplateType.ToString(), cancel)
?? throw new InvalidOperationException($"Receiver information is missing in the notification." + ?? 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); temp.Subject = ReplacePlaceHolders(temp.Subject, placeHolders, MailParams.Placeholders);

View File

@ -1,6 +1,4 @@
using Newtonsoft.Json; #if NET
using Newtonsoft.Json.Serialization;
#if NET
using System.Text.Json; using System.Text.Json;
using System.Text.Json.Serialization; using System.Text.Json.Serialization;
#endif #endif
@ -12,15 +10,14 @@ namespace EnvelopeGenerator.Domain.Constants
#region Json Serializer Settings #region Json Serializer Settings
public static class Json public static class Json
{ {
//TODO: update to use System.Text.Json #if NET
public static readonly JsonSerializerSettings ForDiagnostics = new JsonSerializerSettings() public static readonly JsonSerializerOptions ForDiagnostics = new()
{ {
ContractResolver = new CamelCasePropertyNamesContractResolver(), PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
Formatting = Formatting.Indented, WriteIndented = true,
NullValueHandling = NullValueHandling.Include DefaultIgnoreCondition = JsonIgnoreCondition.Never
}; };
#if NET
public static readonly JsonSerializerOptions ForAnnotations = new() public static readonly JsonSerializerOptions ForAnnotations = new()
{ {
PropertyNamingPolicy = JsonNamingPolicy.CamelCase, PropertyNamingPolicy = JsonNamingPolicy.CamelCase,

View File

@ -1,4 +1,5 @@
using DigitalData.Core.Exceptions; using DigitalData.Core.Exceptions;
using EnvelopeGenerator.Application.Common.Extensions;
using EnvelopeGenerator.Application.EnvelopeReceivers.Queries; using EnvelopeGenerator.Application.EnvelopeReceivers.Queries;
using EnvelopeGenerator.Domain.Constants; using EnvelopeGenerator.Domain.Constants;
using MediatR; using MediatR;
@ -33,7 +34,7 @@ public class DocumentController : ControllerBase
if(byteData is null || byteData.Length == 0) if(byteData is null || byteData.Length == 0)
{ {
_logger.LogError("Document byte data is null or empty for envelope-receiver entity:\n{envelopeKey}.", _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."); throw new NotFoundException("Document is empty.");
} }