BBaseSetting - Esempi
Impostazioni JSON tipizzate
using B.BBaseClass;
using B.BAttributes;
using System.Reflection;
using System.Text.Json.Serialization;
public sealed class ApplicationSetting : BBaseSetting
{
private ApplicationSetting(string filename)
: base(filename, Assembly.GetExecutingAssembly())
{
}
[BFieldSetting(true)]
public string ApplicationName { get; set; } = "";
[BFieldSetting(true)]
public int RefreshSeconds { get; set; }
public string RuntimeValue { get; set; } = "";
[JsonIgnore]
public string SecretInMemory { get; set; } = "";
public static ApplicationSetting? CreateInstance(string filename)
{
ApplicationSetting setting = new ApplicationSetting(filename);
return Initialize(setting) as ApplicationSetting;
}
public override void MappingDataDefault()
{
ApplicationName = "B-Arts Application";
RefreshSeconds = 60;
}
}
Caricamento e salvataggio
ApplicationSetting? setting = ApplicationSetting.CreateInstance("BAppSettings.config");
if (setting != null)
{
setting.RefreshSeconds = 120;
bool saved = setting.Update();
}
Se il file esiste, BBaseSetting deserializza il JSON nel tipo derivato. Se non esiste, richiama MappingDataDefault e successivamente PartialMappingDataDefault. Update serializza l'istanza usando BJSON.DefaultOptionsSettingFile.
Le proprietà marcate con JsonIgnore non vengono copiate durante il caricamento. Controllare ExceptionsList quando CreateInstance restituisce null o il caricamento non produce il risultato atteso.
Salvataggio dei soli campi setting
ApplicationSetting? setting = ApplicationSetting.CreateInstance("BAppSettings.config");
if (setting != null)
{
setting.ApplicationName = "B-Arts Application";
setting.RefreshSeconds = 120;
setting.RuntimeValue = "non persistito da questo metodo";
bool saved = setting.UpdateSettingFields();
}
UpdateSettingFields salva soltanto ApplicationName e RefreshSeconds, perché sono marcate con BFieldSetting(true). Esclude proprietà senza attributo, proprietà con BFieldSetting(false), indicizzatori e proprietà con JsonIgnore.
Update() mantiene invece il comportamento storico e salva tutte le proprietà pubbliche serializzabili. La scelta del metodo è esplicita e non modifica la compatibilità dei setting esistenti.
