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);
}