なべひろBlog

プログラミングをメインに仕事に関するアレコレを発信しています。

C#でアプリの設定値を管理する

アプリ運用で設定値の運用は大事な項目です。

WinFormsでは(WPFでは見た事がないだけ)プロパティに「設定」があり、それに項目を追加して運用できます。

しかし、これは運用面においてはイマイチです。それは

1.決まった型の変数しか設定できない。

2.アプリケーションのバージョンが更新されると設定も新規になる。(古いバージョンの情報が必要なら引き継ぎの処理が必要)

1につて私は結構独自ClassやListの値を保存したい時があり、機能不足です。

2についても、もしかして使い方によっては便利なのかもしれませんが私的にはいらない機能です。

という事で独自に作って自分できちんと管理しましょう。

まずは管理するClassの作成

namespace ApplicationSetting
{
    public class AppSetting
    {
        public List<string> SettingList = new List<string>();
    }
}

そしてコンストラクタなどで読み込んで

if (System.IO.File.Exists($"{AppDomain.CurrentDomain.BaseDirectory}Setting.xml") == false)
{
    // ファイルが無ければ新規
    setting = new ApplicationSetting.AppSetting();
}
else
{
    //読み込むファイルを開く
    using var sr = new System.IO.StreamReader($"{AppDomain.CurrentDomain.BaseDirectory}Setting.xml", new System.Text.UTF8Encoding(false));
    //XmlSerializerオブジェクトを作成
    var serializer = new System.Xml.Serialization.XmlSerializer(typeof(ApplicationSetting.AppSetting));
    //XMLファイルから読み込み、逆シリアル化する
    setting = (ApplicationSetting.AppSetting)serializer.Deserialize(sr);
}

アプリの中で活用し、どこかで保存

using var sw = new System.IO.StreamWriter($"{AppDomain.CurrentDomain.BaseDirectory}Setting.xml", false, new System.Text.UTF8Encoding(false));
//オブジェクトの型を指定する
var serializer = new System.Xml.Serialization.XmlSerializer(typeof(ApplicationSetting.AppSetting));
//シリアル化し、XMLファイルに保存する
serializer.Serialize(sw, setting);

usingの使い方はC#のバージョンによって若干異なりますので修正が必要です。

これを使えば独自ClassのListなんかも保存できますし、今のところ使えない型はありません。(いや、何かあるかもしれないw)