Move System.Text.Json serializer to Infrastructure project

This commit is contained in:
kjac
2023-02-14 07:03:25 +01:00
parent eb0ec7bee8
commit b34f0280c5
6 changed files with 32 additions and 54 deletions

View File

@@ -1,6 +1,5 @@
using Microsoft.Extensions.DependencyInjection;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Api.Management.Serialization;
using Umbraco.Cms.Api.Management.Services;
namespace Umbraco.Cms.Api.Management.DependencyInjection;
@@ -10,8 +9,7 @@ public static class JsonBuilderExtensions
internal static IUmbracoBuilder AddJson(this IUmbracoBuilder builder)
{
builder.Services
.AddTransient<IJsonPatchService, JsonPatchService>()
.AddTransient<ISystemTextJsonSerializer, SystemTextJsonSerializer>();
.AddTransient<IJsonPatchService, JsonPatchService>();
return builder;
}

View File

@@ -1,7 +0,0 @@
using Umbraco.Cms.Core.Serialization;
namespace Umbraco.Cms.Api.Management.Serialization;
public interface ISystemTextJsonSerializer : IJsonSerializer
{
}

View File

@@ -1,18 +0,0 @@
using System.Text.Json;
namespace Umbraco.Cms.Api.Management.Serialization;
// TOOD: move this to Infrastructure.Serialization + get rid of ISystemTextJsonSerializer
public class SystemTextJsonSerializer : ISystemTextJsonSerializer
{
private JsonSerializerOptions _jsonSerializerOptions;
public SystemTextJsonSerializer()
{
_jsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
}
public string Serialize(object? input) => JsonSerializer.Serialize(input, _jsonSerializerOptions);
public T? Deserialize<T>(string input) => JsonSerializer.Deserialize<T>(input, _jsonSerializerOptions);
public T? DeserializeSubset<T>(string input, string key) => throw new NotSupportedException();
}

View File

@@ -2,21 +2,22 @@
using Json.Patch;
using Umbraco.Cms.Api.Management.Serialization;
using Umbraco.Cms.Api.Management.ViewModels.JsonPatch;
using Umbraco.Cms.Core.Serialization;
namespace Umbraco.Cms.Api.Management.Services;
public class JsonPatchService : IJsonPatchService
{
private readonly ISystemTextJsonSerializer _systemTextJsonSerializer;
private readonly IJsonSerializer _jsonSerializer;
public JsonPatchService(ISystemTextJsonSerializer systemTextJsonSerializer) => _systemTextJsonSerializer = systemTextJsonSerializer;
public JsonPatchService(IJsonSerializer jsonSerializer) => _jsonSerializer = jsonSerializer;
public PatchResult? Patch(JsonPatchViewModel[] patchViewModel, object objectToPatch)
{
var patchString = _systemTextJsonSerializer.Serialize(patchViewModel);
var patchString = _jsonSerializer.Serialize(patchViewModel);
var docString = _systemTextJsonSerializer.Serialize(objectToPatch);
JsonPatch? patch = _systemTextJsonSerializer.Deserialize<JsonPatch>(patchString);
var docString = _jsonSerializer.Serialize(objectToPatch);
JsonPatch? patch = _jsonSerializer.Deserialize<JsonPatch>(patchString);
var doc = JsonNode.Parse(docString);
return patch?.Apply(doc);
}

View File

@@ -1,6 +1,4 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Umbraco.Cms.Core.Serialization;
using Umbraco.Cms.Core.Serialization;
using Umbraco.Cms.Core.Web;
namespace Umbraco.Cms.Infrastructure.Serialization;
@@ -47,24 +45,6 @@ public class ContextualJsonSerializer : IJsonSerializer
return _jsonNetSerializer;
}
private class SystemTextJsonSerializer : IJsonSerializer
{
private JsonSerializerOptions _jsonSerializerOptions;
public SystemTextJsonSerializer()
{
_jsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
_jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
_jsonSerializerOptions.Converters.Add(new JsonObjectConverter());
}
public string Serialize(object? input) => JsonSerializer.Serialize(input, _jsonSerializerOptions);
public T? Deserialize<T>(string input) => JsonSerializer.Deserialize<T>(input, _jsonSerializerOptions);
public T? DeserializeSubset<T>(string input, string key) => throw new NotSupportedException();
}
}

View File

@@ -0,0 +1,24 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Umbraco.Cms.Core.Serialization;
namespace Umbraco.Cms.Infrastructure.Serialization;
public class SystemTextJsonSerializer : IJsonSerializer
{
private readonly JsonSerializerOptions _jsonSerializerOptions;
public SystemTextJsonSerializer()
{
_jsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
_jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
// we may need to add JsonObjectConverter at some point, but for the time being things work fine without
// _jsonSerializerOptions.Converters.Add(new JsonObjectConverter());
}
public string Serialize(object? input) => JsonSerializer.Serialize(input, _jsonSerializerOptions);
public T? Deserialize<T>(string input) => JsonSerializer.Deserialize<T>(input, _jsonSerializerOptions);
public T? DeserializeSubset<T>(string input, string key) => throw new NotSupportedException();
}