diff --git a/JackCraft.Config.sln.DotSettings.user b/JackCraft.Config.sln.DotSettings.user index c9fbfed..5e14006 100644 --- a/JackCraft.Config.sln.DotSettings.user +++ b/JackCraft.Config.sln.DotSettings.user @@ -1,4 +1,7 @@  + ForceIncluded ForceIncluded ForceIncluded - ForceIncluded \ No newline at end of file + ForceIncluded + ForceIncluded + ForceIncluded \ No newline at end of file diff --git a/JackCraft.Config/Config.cs b/JackCraft.Config/Config.cs index ec5e5cc..4dffce5 100644 --- a/JackCraft.Config/Config.cs +++ b/JackCraft.Config/Config.cs @@ -8,7 +8,7 @@ public class Config private readonly FileInfo _configFile; public readonly string ConfigFileName; public readonly string ConfigFilePath; - private Dictionary _configData = null!; + private Dictionary _configData = new(); public Config(FileInfo configFile) { @@ -46,7 +46,12 @@ public class Config var currentData = _configData; for (var i = 0; i < keys.Length - 1; i++) { - if (!currentData.TryGetValue(keys[i], out var tValue)) return defaultValue; + if (!currentData.TryGetValue(keys[i], out var tValue)) + { + Set(key, defaultValue); + return defaultValue; + } + switch (tValue) { case JObject jObject: @@ -56,12 +61,14 @@ public class Config currentData = nestedDict; break; default: + Set(key, defaultValue); return defaultValue; } } if (currentData.TryGetValue(keys[^1], out var result) && result is T typedResult) return typedResult; + Set(key, defaultValue); return defaultValue; } @@ -70,19 +77,27 @@ public class Config LoadConfigData(); var keys = key.Split('.'); var currentData = _configData; + for (var i = 0; i < keys.Length - 1; i++) { - if (!currentData.TryGetValue(keys[i], out var tValue) || - tValue is not Dictionary nestedDict) + var currentKey = keys[i]; + + if (!currentData.TryGetValue(currentKey, out var tValue)) { - nestedDict = new Dictionary(); - currentData[keys[i]] = nestedDict; + tValue = new Dictionary(); + currentData[currentKey] = tValue; } - currentData = nestedDict; + if (tValue is JObject jObject) + currentData[currentKey] = + jObject.ToObject>() ?? new Dictionary(); + + currentData = (Dictionary)currentData[currentKey]; } - currentData[keys[^1]] = (object?)value ?? string.Empty; + var finalKey = keys[^1]; + currentData[finalKey] = value!; + var json = JsonConvert.SerializeObject(_configData, Formatting.Indented); File.WriteAllText(_configFile.FullName, json); }