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