Skip to content

Commit 5f543b4

Browse files
committed
More centralized JsonSerializer options
1 parent 3c0931a commit 5f543b4

File tree

5 files changed

+38
-33
lines changed

5 files changed

+38
-33
lines changed

API/Services/Email/Mailjet/MailjetEmailService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ private async Task SendMails(MailBase[] mails, CancellationToken cancellationTok
7979
var json = JsonSerializer.Serialize(new MailsWrap
8080
{
8181
Messages = mails
82-
}, JsonSettings.CamelCase);
82+
}, JsonSettings.MailJetSettings);
8383

8484
var response = await _httpClient.PostAsync("send",
8585
new StringContent(json, Encoding.UTF8, MediaTypeNames.Application.Json), cancellationToken);
Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,41 @@
11
using System.Text.Json;
2+
using System.Text.Json.Serialization;
23

34
namespace OpenShock.Common.JsonSerialization;
45

56
public static class JsonSettings
67
{
7-
public static readonly JsonSerializerOptions FlagCompatibleCaseInsensitive = new()
8+
private static void ConfigureBase(JsonSerializerOptions options)
89
{
9-
PropertyNameCaseInsensitive = true,
10-
Converters = { new FlagCompatibleJsonStringEnumConverter() }
10+
options.PropertyNameCaseInsensitive = true;
11+
options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
12+
options.Converters.Add(new PermissionTypeConverter());
13+
}
14+
15+
public static void HttpOptions(Microsoft.AspNetCore.Http.Json.JsonOptions options)
16+
{
17+
ConfigureBase(options.SerializerOptions);
18+
options.SerializerOptions.Converters.Add(new JsonStringEnumConverter()); // TODO: Why does this differ from the one below?
19+
}
20+
21+
public static void MvcOptions(Microsoft.AspNetCore.Mvc.JsonOptions options)
22+
{
23+
ConfigureBase(options.JsonSerializerOptions);
24+
options.JsonSerializerOptions.Converters.Add(new FlagCompatibleJsonStringEnumConverter()); // TODO: Why does this differ from the one above?
25+
}
26+
27+
public static readonly JsonSerializerOptions MailJetSettings = new()
28+
{
29+
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
1130
};
1231

13-
public static readonly JsonSerializerOptions CaseInsensitive = new()
32+
public static readonly JsonSerializerOptions LiveControlSettings = new() // TODO: Why does this differ from the one below?
1433
{
1534
PropertyNameCaseInsensitive = true
1635
};
17-
18-
public static readonly JsonSerializerOptions CamelCase = new()
36+
public static readonly JsonSerializerOptions LiveControlSettings2 = new() // TODO: Why does this differ from the one above?
1937
{
20-
PropertyNamingPolicy = JsonNamingPolicy.CamelCase
38+
PropertyNameCaseInsensitive = true,
39+
Converters = { new FlagCompatibleJsonStringEnumConverter() }
2140
};
2241
}

Common/OpenShockServiceHelper.cs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
using Redis.OM;
2626
using Redis.OM.Contracts;
2727
using StackExchange.Redis;
28-
using System.Text.Json;
29-
using System.Text.Json.Serialization;
3028
using System.Threading.RateLimiting;
3129
using OpenShock.Common.Extensions;
3230
using OpenShock.Common.Utils;
@@ -133,21 +131,8 @@ public static IServiceCollection AddOpenShockServices(this IServiceCollection se
133131

134132
services.AddSingleton<IAuthorizationMiddlewareResultHandler, OpenShockAuthorizationMiddlewareResultHandler>();
135133

136-
services.ConfigureHttpJsonOptions(options =>
137-
{
138-
options.SerializerOptions.PropertyNameCaseInsensitive = true;
139-
options.SerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
140-
options.SerializerOptions.Converters.Add(new PermissionTypeConverter());
141-
options.SerializerOptions.Converters.Add(new JsonStringEnumConverter());
142-
});
143-
144-
services.AddControllers().AddJsonOptions(x =>
145-
{
146-
x.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
147-
x.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
148-
x.JsonSerializerOptions.Converters.Add(new PermissionTypeConverter());
149-
x.JsonSerializerOptions.Converters.Add(new FlagCompatibleJsonStringEnumConverter());
150-
});
134+
services.ConfigureHttpJsonOptions(JsonSettings.HttpOptions);
135+
services.AddControllers().AddJsonOptions(JsonSettings.MvcOptions);
151136

152137
var apiVersioningBuilder = services.AddApiVersioning(options =>
153138
{

Common/Utils/JsonWebSocketUtils.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ public static class JsonWebSocketUtils
1313

1414
public static readonly RecyclableMemoryStreamManager RecyclableMemory = new();
1515

16-
public static async Task<OneOf.OneOf<T?, DeserializeFailed, WebsocketClosure>> ReceiveFullMessageAsyncNonAlloc<T>(
17-
WebSocket socket, CancellationToken cancellationToken)
16+
public static async Task<OneOf.OneOf<T?, DeserializeFailed, WebsocketClosure>> ReceiveFullMessageAsyncNonAlloc<T>(WebSocket socket, JsonSerializerOptions? options = null, CancellationToken cancellationToken = default)
1817
{
1918
var buffer = ArrayPool<byte>.Shared.Rent(4096);
2019
try
@@ -39,7 +38,7 @@ public static class JsonWebSocketUtils
3938
try
4039
{
4140
var data = message.GetSpan(bytes)[..bytes];
42-
return JsonSerializer.Deserialize<T>(data, JsonSettings.FlagCompatibleCaseInsensitive);
41+
return JsonSerializer.Deserialize<T>(data, options);
4342
}
4443
catch (Exception e)
4544
{

LiveControlGateway/Controllers/LiveControlController.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,9 +257,11 @@ await QueueMessage(new LiveControlResponse<LiveResponseType>
257257
/// <inheritdoc />
258258
protected override async Task<bool> HandleReceive(CancellationToken cancellationToken)
259259
{
260-
var message =
261-
await JsonWebSocketUtils.ReceiveFullMessageAsyncNonAlloc<BaseRequest<LiveRequestType>>(WebSocket!,
262-
LinkedToken);
260+
var message = await JsonWebSocketUtils.ReceiveFullMessageAsyncNonAlloc<BaseRequest<LiveRequestType>>(
261+
WebSocket!,
262+
JsonSettings.LiveControlSettings2,
263+
LinkedToken
264+
);
263265

264266
var continueLoop = await message.Match(async request =>
265267
{
@@ -343,7 +345,7 @@ private async Task IntakeBulkFrame(JsonDocument? requestData)
343345
ClientLiveFrame[]? frames;
344346
try
345347
{
346-
frames = requestData?.Deserialize<ClientLiveFrame[]>(JsonSettings.CaseInsensitive);
348+
frames = requestData?.Deserialize<ClientLiveFrame[]>(JsonSettings.LiveControlSettings);
347349

348350
if (frames is not { Length: > 0 })
349351
{
@@ -387,7 +389,7 @@ private async Task IntakeFrame(JsonDocument? requestData)
387389
ClientLiveFrame? frame;
388390
try
389391
{
390-
frame = requestData?.Deserialize<ClientLiveFrame>(JsonSettings.CaseInsensitive);
392+
frame = requestData?.Deserialize<ClientLiveFrame>(JsonSettings.LiveControlSettings);
391393

392394
if (frame is null)
393395
{

0 commit comments

Comments
 (0)