using System.Diagnostics.CodeAnalysis; using System.Text.Json; using System.Text.Json.Nodes; using Umbraco.Cms.Core.Serialization; using Umbraco.Extensions; namespace Umbraco.Cms.Infrastructure.Serialization; public abstract class SystemTextJsonSerializerBase : IJsonSerializer { protected abstract JsonSerializerOptions JsonSerializerOptions { get; } /// public string Serialize(object? input) => JsonSerializer.Serialize(input, JsonSerializerOptions); /// public T? Deserialize(string input) => JsonSerializer.Deserialize(input, JsonSerializerOptions); /// public bool TryDeserialize(object input, [NotNullWhen(true)] out T? value) where T : class { var jsonString = input switch { JsonNode jsonNodeValue => jsonNodeValue.ToJsonString(), string stringValue when stringValue.DetectIsJson() => stringValue, _ => null }; value = jsonString.IsNullOrWhiteSpace() ? null : Deserialize(jsonString); return value != null; } }