For extending JSON or dynamic types with optional fields
public class DictionaryModel { private Dictionary<string, object> _data = new Dictionary<string, object>(); public void SetDictionary(Dictionary<string, object> data) { _data = data; } public Dictionary<string, object> GetDictionary() { return _data; } protected T Get<T>(string key, T defaulValue = default(T)) { if (_data.TryGetValue(key, out var val)) { if (val == null) return defaulValue; if (val is T) return (T)val; var basicType = Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T); try { var basicVal = Convert.ChangeType(val, basicType); return (T)basicVal; } catch (Exception) { //Ignore } } return defaulValue; } protected void Set(string key, object value) { _data[key] = value; } } public class ModelWithDescription : DictionaryModel { public string Description { get => Get<string>("Description"); set => Set("Description", value); } public int? Quantity { get => Get<int?>("Quantity"); set => Set("Quantity", value); } }
306400cookie-checkC# DictionaryModel