Move System.Text.Json serializer to Infrastructure project
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
using Umbraco.Cms.Core.Serialization;
|
||||
|
||||
namespace Umbraco.Cms.Api.Management.Serialization;
|
||||
|
||||
public interface ISystemTextJsonSerializer : IJsonSerializer
|
||||
{
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
Reference in New Issue
Block a user