using Newtonsoft.Json; using Newtonsoft.Json.Converters; using Newtonsoft.Json.Linq; using Umbraco.Cms.Core.Serialization; namespace Umbraco.Cms.Infrastructure.Serialization; public class JsonNetSerializer : IJsonSerializer { protected static readonly JsonSerializerSettings JsonSerializerSettings = new() { Converters = new List { new StringEnumConverter() }, Formatting = Formatting.None, NullValueHandling = NullValueHandling.Ignore, }; public string Serialize(object? input) => JsonConvert.SerializeObject(input, JsonSerializerSettings); public T? Deserialize(string input) => JsonConvert.DeserializeObject(input, JsonSerializerSettings); public T? DeserializeSubset(string input, string key) { if (key == null) { throw new ArgumentNullException(nameof(key)); } JObject? root = Deserialize(input); JToken? jToken = root?.SelectToken(key); return jToken switch { JArray jArray => jArray.ToObject(), JObject jObject => jObject.ToObject(), _ => jToken is null ? default : jToken.Value(), }; } }