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