private async Task <JsonSrnDictionary> GetCacheDictAsync(string nameSpace, bool createIfNotExist = false) { if (_cache.ContainsKey(nameSpace)) { return(_cache[nameSpace]); } // Store not in the cache, we need to load it from the filesystem. var path = BuildPath(nameSpace); if (File.Exists(path)) { _cache[nameSpace] = JsonConvert.DeserializeObject <JsonSrnDictionary>( await File.ReadAllTextAsync(BuildPath(nameSpace)), new DynamicDictConverter <JsonSrnDictionary>()); } else if (createIfNotExist) { _cache[nameSpace] = new JsonSrnDictionary(); } else { return(null); } return(_cache[nameSpace]); }
internal new dynamic this[string key] { get { // Dot paths use nested dictionaries var idx = key.IndexOf('.'); if (idx != -1) { var firstKey = key.Substring(0, idx); // Find our nested dictionary if (!ContainsKey(firstKey) || base[firstKey].GetType() != typeof(JsonSrnDictionary)) { return(null); } var str = key.Substring(idx + 1); return(base[firstKey][str]); } return(ContainsKey(key) ? base[key] : null); } set { // Dot paths use nested dictionaries var idx = key.IndexOf('.'); if (idx != -1) { var firstKey = key.Substring(0, idx); // Create our nested dictionary if (!ContainsKey(firstKey) || base[firstKey].GetType() != typeof(JsonSrnDictionary)) { base[firstKey] = new JsonSrnDictionary(); } base[firstKey][key.Substring(idx + 1)] = value; return; } if (value == null) { // Setting the value to null should remove it. Remove(key); return; } base[key] = value; } }