public class ParamDictFlex { private Dictionary DictVals { get; set; } = new Dictionary(); // Costruttore da stringa JSON (TValue è un tipo concreto serializzabile) public ParamDictFlex(string rawVal) { if (string.IsNullOrWhiteSpace(rawVal)) { DictVals = new Dictionary(); return; } DictVals = JsonConvert.DeserializeObject>(rawVal) ?? new Dictionary(); } // Costruttore da dizionario public ParamDictFlex(Dictionary newDict) { DictVals = newDict ?? new Dictionary(); } // Versione serializzata del dizionario public string Serialized { get => JsonConvert.SerializeObject(DictVals); } // Recupera valore; ritorna default(TValue) se la chiave non esiste public TValue GetVal(string reqKey) { if (reqKey is null) throw new ArgumentNullException(nameof(reqKey)); return DictVals.TryGetValue(reqKey, out var val) ? val : default!; } // Imposta valore (aggiunge o aggiorna) public void SetVal(string key, TValue val) { if (key is null) throw new ArgumentNullException(nameof(key)); DictVals[key] = val; } // Rimuove chiave public bool Remove(string key) { if (key is null) throw new ArgumentNullException(nameof(key)); return DictVals.Remove(key); } // Controlla esistenza chiave public bool ContainsKey(string key) { if (key is null) throw new ArgumentNullException(nameof(key)); return DictVals.ContainsKey(key); } // Espone una copia di sola lettura del dizionario public IReadOnlyDictionary AsReadOnly() => new Dictionary(DictVals); }