nucs.JsonSettings
                             
                            
                                2.0.0-alpha2
                            
                        
                    See the version list below for details.
dotnet add package nucs.JsonSettings --version 2.0.0-alpha2
NuGet\Install-Package nucs.JsonSettings -Version 2.0.0-alpha2
<PackageReference Include="nucs.JsonSettings" Version="2.0.0-alpha2" />
<PackageVersion Include="nucs.JsonSettings" Version="2.0.0-alpha2" />
<PackageReference Include="nucs.JsonSettings" />
paket add nucs.JsonSettings --version 2.0.0-alpha2
#r "nuget: nucs.JsonSettings, 2.0.0-alpha2"
#:package nucs.JsonSettings@2.0.0-alpha2
#addin nuget:?package=nucs.JsonSettings&version=2.0.0-alpha2&prerelease
#tool nuget:?package=nucs.JsonSettings&version=2.0.0-alpha2&prerelease
JsonSettings
Easiest way you'll ever write settings for your app.
- Modular
- One Liner
- Abstract
Install
PM> Install-Package nucs.JsonSettings
Getting Started
See https://github.com/Nucs/JsonSettings/wiki/<br> Test project: https://github.com/Nucs/JsonSettings/tree/master/tests/nucs.JsonSettings.xTests<br> Blog Posts: http://blog.elibelash.com/2017/10/settings-file-in-your-project.html
JsonSettings is the base abstract class that inherits ISavable.<br> Here is a self explanatory quicky of to how and what:
- I want a hardcoded settings file
//Step 1: create a class and inherit JsonSettings
class MySettings : JsonSettings {
    //Step 2: override a default FileName or keep it empty. Just make sure to specify it when calling Load!
    //This is used for default saving and loading so you won't have to specify the filename/path every time.
    //Putting just a filename without folder will put it inside the executing file's directory.
    public override string FileName { get; set; } = "TheDefaultFilename.extension"; //for loading and saving.
    #region Settings
    public string SomeProperty { get; set; }
    public int SomeNumberWithDefaultValue { get; set; } = 1;
    [JsonIgnore] public char ImIgnoredAndIWontBeSaved { get; set; }
    
    #endregion
    //Step 3: Override parent's constructors
    public MySettings() { }
    public MySettings(string fileName) : base(fileName) { }
}
//Step 4: Load
public MySettings Settings = JsonSettings.Load<MySettings>("config.json"); //relative path to executing file.
//or create a new empty
public MySettings Settings = JsonSettings.Construct<MySettings>("config.json");
//Step 5: Pwn.
Settings.SomeProperty = "ok";
Settings.Save();
- I want a dynamic settings
- Dynamic settings will automatically create new keys.
- ValueTypes are returned as- Nullable<Type>, therefore if a key doesn't exist - a null is returned.
 
//Step 1: Just load it, it'll be created if doesn't exist.
public SettingsBag Settings = JsonSettings.Load<SettingsBag>("config.json");
//Step 2: use!
Settings["key"]  = "dat value tho";
Settings["key2"] = 123; //dat number tho
dynamic dyn = Settings.AsDynamic();
if ((int?)dyn.key2==123)
    Console.WriteLine("explode");
dyn.Save(); /* or */ Settings.Save();
- I want a encrypted settings file
- Uses AES/Rijndael
- Can be applied to any settings class because it is a module.
 
MySettings Settings = JsonSettings.Load<MySettings>("config.json", q=>q.WithEncryption("mysupersecretpassword"));
SettingsBag Settings = JsonSettings.Load<SettingsBag>("config.json", q=>q.WithEncryption("mysupersecretpassword"));
//or
MySettings Settings = JsonSettings.Configure<MySettings>("config.json")
                     .WithEncryption("mysupersecretpassword")
               //or: .WithModule<RijndaelModule>("pass");
                     .LoadNow();
SettingsBag Settings = JsonSettings.Configure<SettingsBag>("config.json")
                     .WithEncryption("mysupersecretpassword")
               //or: .WithModule<RijndaelModule>("pass");
                     .LoadNow();
- I want dynamic settings to automatically save when changed
- note: SettingsBag has it's own implementation of EnableAutosave().
 
//Step 1:
SettingsBag Settings = JsonSettings.Load<SettingsBag>("config.json").EnableAutosave();
//Unavailable for hardcoded settings yet! (ty netstandard2.0 for not being awesome on proxies)
//Step 2:
Settings.AsDynamic().key = "wow"; //BOOM! SAVED!
Settings["key"] = "wow two"; //BOOM! SAVED!
- I want hardcoded settings to automatically save when changed
- Requires package nucs.JsonSettings.Autosavethat usesCastle.Core.
 
- Requires package 
Settings x  = JsonSettings.Load<Settings>().EnableAutosave();
//or:
ISettings x = JsonSettings.Load<Settings>().EnableIAutosave<ISettings>(); //Settings implements interface ISettings
x.Property = "value"; //Booyah! SAVED!
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. | 
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. | 
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. | 
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. | 
| MonoAndroid | monoandroid was computed. | 
| MonoMac | monomac was computed. | 
| MonoTouch | monotouch was computed. | 
| Tizen | tizen40 was computed. tizen60 was computed. | 
| Xamarin.iOS | xamarinios was computed. | 
| Xamarin.Mac | xamarinmac was computed. | 
| Xamarin.TVOS | xamarintvos was computed. | 
| Xamarin.WatchOS | xamarinwatchos was computed. | 
- 
                                                    .NETStandard 2.0- Newtonsoft.Json (>= 12.0.3)
- System.Security.SecureString (>= 4.3.0)
 
NuGet packages (3)
Showing the top 3 NuGet packages that depend on nucs.JsonSettings:
| Package | Downloads | 
|---|---|
| Nucs.JsonSettings.Autosave An extension to JsonSettings that allows to wrap a class via transparent proxy that autosaves. Support for Autosaving on INotifyPropertyChanged/INotifyCollectionChanged. | |
| Kitty.Common_framework this library contains log config inject database | |
| Kitty.Common Package Description | 
GitHub repositories (3)
Showing the top 3 popular GitHub repositories that depend on nucs.JsonSettings:
| Repository | Stars | 
|---|---|
| HandyOrg/HandyWinGet 
                                                            GUI for installing apps through WinGet and Creating Yaml file
                                                         | |
| WinUICommunity/WinUICommunity 
                                                            WinUICommunity is a collection of useful classes, controls, styles, and codes for WinUI 3. Create a WinUI 3 app in less than a minute with the built-in project templates and scaffolding tools.  
                                                         | |
| ghost1372/DevWinUI 
                                                            DevWinUI is a collection of useful classes, controls, styles, and codes for WinUI 3. Create a WinUI 3 app in less than a minute with the built-in project templates and scaffolding tools.  
                                                         | 
| Version | Downloads | Last Updated | 
|---|---|---|
| 2.0.2 | 16,229 | 4/5/2023 | 
| 2.0.1 | 2,053 | 1/13/2023 | 
| 2.0.0-alpha7 | 4,933 | 5/23/2021 | 
| 2.0.0-alpha5 | 1,353 | 5/9/2021 | 
| 2.0.0-alpha4 | 1,290 | 5/8/2021 | 
| 2.0.0-alpha3 | 1,351 | 5/1/2021 | 
| 2.0.0-alpha2 | 1,400 | 3/31/2021 | 
| 2.0.0-alpha1 | 1,286 | 3/29/2021 | 
| 1.0.7 | 10,799 | 6/3/2018 | 
| 1.0.6 | 2,011 | 5/26/2018 | 
| 1.0.5 | 2,079 | 5/11/2018 | 
| 1.0.4 | 2,038 | 4/12/2018 | 
| 1.0.3 | 1,999 | 4/12/2018 | 
| 1.0.2 | 2,083 | 4/8/2018 | 
| 1.0.0.1 | 2,340 | 9/30/2017 | 
- Upgraded to .NETCore project type
- Target changed to .NET Standard 2.0
- Root namespace renamed to Nucs.