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;
}
}