using Newtonsoft.Json; using Newtonsoft.Json.Linq; using TRX_ConfigToolLib.Utils.Json; namespace TRX_ConfigToolLib.Models.Specification; public class Specification { public Dictionary> Enums { get; private set; } public List CategorisedProperties { get; private set; } public List Properties { get; private set; } public Specification(string sourceData) { JObject data = JObject.Parse(sourceData); JObject enumData = data.ContainsKey(nameof(Enums)) ? data[nameof(Enums)].ToObject() : new(); Enums = new(); foreach (var (key, value) in enumData) { List enumValues = value.ToObject>(); Enums[key] = enumValues.Select(val => new EnumOption { EnumName = key, ID = val }).ToList(); } string categoryData = data[nameof(CategorisedProperties)].ToString(); PropertyConverter converter = new(); CategorisedProperties = JsonConvert.DeserializeObject>(categoryData, converter); Properties = new(); foreach (BaseProperty property in CategorisedProperties.SelectMany(c => c.Properties)) { property.Initialise(this); Properties.Add(property); } } }