using System.Collections.Generic; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Models.Internal { /// /// Format-agnostic representation of item data /// public class DatItem : Dictionary { #region Common Keys public const string TypeKey = "_type"; #endregion /// /// Quick accessor to item type, if it exists /// [JsonProperty("itemtype", DefaultValueHandling = DefaultValueHandling.Ignore), XmlElement("itemtype")] public ItemType? Type { get => ContainsKey(TypeKey) ? this[TypeKey] as ItemType? : null; set => this[TypeKey] = value; } #region Reading Helpers /// /// Read a key as a bool, returning null on error /// public bool? ReadBool(string key) { if (string.IsNullOrWhiteSpace(key)) return null; if (!ContainsKey(key)) return null; return this[key] as bool?; } /// /// Read a key as a double, returning null on error /// public double? ReadDouble(string key) { if (string.IsNullOrWhiteSpace(key)) return null; if (!ContainsKey(key)) return null; return this[key] as double?; } /// /// Read a key as a long, returning null on error /// public long? ReadLong(string key) { if (string.IsNullOrWhiteSpace(key)) return null; if (!ContainsKey(key)) return null; return this[key] as long?; } /// /// Read a key as a string, returning null on error /// public string? ReadString(string key) { if (string.IsNullOrWhiteSpace(key)) return null; if (!ContainsKey(key)) return null; return this[key] as string; } #endregion } }