diff --git a/SabreTools.Models/Internal/DictionaryBase.cs b/SabreTools.Models/Internal/DictionaryBase.cs index f8a67e65..b7c445d6 100644 --- a/SabreTools.Models/Internal/DictionaryBase.cs +++ b/SabreTools.Models/Internal/DictionaryBase.cs @@ -22,26 +22,85 @@ namespace SabreTools.Models.Internal /// /// Read a key as a bool, returning null on error /// - public bool? ReadBool(string key) => Read(key); + public bool? ReadBool(string key) + { + bool? asBool = Read(key); + if (asBool != null) + return asBool; + + string? asString = Read(key); + return asString?.ToLowerInvariant() switch + { + "true" => true, + "yes" => true, + "false" => false, + "no" => false, + _ => null, + }; + } /// /// Read a key as a double, returning null on error /// - public double? ReadDouble(string key) => Read(key); + public double? ReadDouble(string key) + { + double? asDouble = Read(key); + if (asDouble != null) + return asDouble; + + string? asString = Read(key); + if (asString != null && double.TryParse(asString, out double asStringDouble)) + return asStringDouble; + + return null; + } /// /// Read a key as a long, returning null on error /// - public long? ReadLong(string key) => Read(key); + public long? ReadLong(string key) + { + long? asLong = Read(key); + if (asLong != null) + return asLong; + + string? asString = Read(key); + if (asString != null && long.TryParse(asString, out long asStringLong)) + return asStringLong; + + return null; + } /// /// Read a key as a string, returning null on error /// - public string? ReadString(string key) => Read(key); + public string? ReadString(string key) + { + string? asString = Read(key); + if (asString != null) + return asString; + + string[]? asArray = Read(key); + if (asArray != null) + return string.Join(',', asArray); + + return null; + } /// /// Read a key as a string[], returning null on error /// - public string[]? ReadStringArray(string key) => Read(key); + public string[]? ReadStringArray(string key) + { + string[]? asArray = Read(key); + if (asArray != null) + return asArray; + + string? asString = Read(key); + if (asString != null) + return new string[] { asString }; + + return null; + } } } \ No newline at end of file