Add Udi and GuidUdi support in JSON serializer

This commit is contained in:
kjac
2023-02-20 11:05:56 +01:00
parent ec46cbcd71
commit e12fbdf5b7
4 changed files with 44 additions and 0 deletions

View File

@@ -30,6 +30,8 @@ public class ConfigureUmbracoBackofficeJsonOptions : IConfigureNamedOptions<Json
// all back-office specific JSON options go here
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
options.JsonSerializerOptions.Converters.Add(new JsonUdiConverter());
options.JsonSerializerOptions.Converters.Add(new JsonGuidUdiConverter());
options.JsonSerializerOptions.Converters.Add(new JsonObjectConverter());
options.JsonSerializerOptions.TypeInfoResolver = _umbracoJsonTypeInfoResolver;

View File

@@ -0,0 +1,20 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Umbraco.Cms.Core;
using Umbraco.Extensions;
namespace Umbraco.Cms.Infrastructure.Serialization;
public class JsonGuidUdiConverter : JsonConverter<GuidUdi>
{
public override GuidUdi? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var stringValue = reader.GetString();
return stringValue.IsNullOrWhiteSpace() == false && UdiParser.TryParse(stringValue, out Udi? udi) && udi is GuidUdi guidUdi
? guidUdi
: null;
}
public override void Write(Utf8JsonWriter writer, GuidUdi value, JsonSerializerOptions options)
=> writer.WriteStringValue(value.ToString());
}

View File

@@ -0,0 +1,20 @@
using System.Text.Json;
using System.Text.Json.Serialization;
using Umbraco.Cms.Core;
using Umbraco.Extensions;
namespace Umbraco.Cms.Infrastructure.Serialization;
public class JsonUdiConverter : JsonConverter<Udi>
{
public override Udi? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
var stringValue = reader.GetString();
return stringValue.IsNullOrWhiteSpace() == false && UdiParser.TryParse(stringValue, out Udi? udi)
? udi
: null;
}
public override void Write(Utf8JsonWriter writer, Udi value, JsonSerializerOptions options)
=> writer.WriteStringValue(value.ToString());
}

View File

@@ -12,6 +12,8 @@ public class SystemTextJsonSerializer : IJsonSerializer
{
_jsonSerializerOptions = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase };
_jsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
_jsonSerializerOptions.Converters.Add(new JsonUdiConverter());
_jsonSerializerOptions.Converters.Add(new JsonGuidUdiConverter());
// we may need to add JsonObjectConverter at some point, but for the time being things work fine without
// _jsonSerializerOptions.Converters.Add(new JsonObjectConverter());
}