using System; using System.Collections.Generic; 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 JsonSerializerSettings() { 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)); var root = Deserialize(input); var jToken = root?.SelectToken(key); return jToken switch { JArray jArray => jArray.ToObject(), JObject jObject => jObject.ToObject(), _ => jToken is null ? default : jToken.Value() }; } } }