B-Arts DocumentationIndice generale

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.