I needed a simple C# class for saving writable application settings. The first attempt was to use Project -> Properties -> Settings, but only user scoped settings are writable. Here’s a simple solution: you will need to add Newtonsoft’s Json.NET (Nuget Json.Net) to your project, if you are not already using it.
using System.IO;
using Newtonsoft.Json;
...
public class AppSettingsBase<T> where T : new()
{
private const string DefaultSettingsFilename = "settings.json";
public void Save(string fileName = DefaultSettingsFilename)
{
File.WriteAllText(fileName, JsonConvert.SerializeObject(this));
}
public static void Save(T settings, string fileName = DefaultSettingsFilename)
{
File.WriteAllText(fileName, JsonConvert.SerializeObject(settings));
}
public static T Load(string fileName = DefaultSettingsFilename)
{
return (File.Exists(fileName))
? JsonConvert.DeserializeObject<T>(File.ReadAllText(fileName)) : new T();
}
}
Add your application defined settings to your settings class (derived from the base template):
public class AppSettings : AppSettingsBase<AppSettings>
{
public Guid ClientId = Guid.Empty;
public List<string> ServerList = new List<string>();
public List<string> DatabasesToExclude = new List<string>();
public bool IsAutoUpdate = true;
public int AutoUpdaterCheckIntervalHours = 6;
public DateTime LastUpdateCheckTime = DateTime.MinValue;
...
}
Using your settings is simple:
AppSettings settings = AppSettings.Load();
settings.LastUpdateCheckTime = DateTime.UtcNow;
settings.Save();