【C#】パラメータ管理【関数】

C#

ソフトを作成する時にパラメータの無いソフトを作ることはほとんど無いと思います。

そのためにパラメータをファイルなどに保存してことが多いです。

パラメータの保存/読出もプログラムを記述しなければならないのが普通ですが、

バージョンアップ(ソフト改造)のたびにパラメータ部分のプログラム変更をするのは結構な手間だったりします。

昔そう思い、データクラスを定義したら勝手にその形式で

ファイルに保存するプログラムを書いていました。

今ではライブラリの「System.Text.Json」を使えば簡単にシリアライズできるので

結構簡単にできたりします。

その手順のメモです。

■nugetでSystem.Text.Jsonをインストール

■usingを追加

using System.Text.Json;

■stringにシリアライズする関数(object→string)

        public static string SerializeJson<T>(T obj)
        {
            var jsonOptions = new JsonSerializerOptions
            {
                WriteIndented = true,
            };
            return JsonSerializer.Serialize(obj, jsonOptions);
        }

■stringからデシリアライズする関数(string→object)

        public static T DeserializeJson<T>(string jsonString)
        {
            var jsonOptions = new JsonSerializerOptions
            {
                WriteIndented = true,
            };
            return JsonSerializer.Deserialize<T>(jsonString, jsonOptions);
        }

これでobject⇔stringの関数が用意できたので保存と読み出しの機能を用意します。


        public static string GetAppDataDirectory()
        {
            return Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
        }

        public static bool LoadData<T>(string fileName, out T param) where T : new()
        {
            string root = Funcs.GetAppDataDirectory();
            string path = Path.Combine(root, fileName);

            if (!File.Exists(path))
            {
                param = new T();
                return false;
            }

            string jsonString = "";
            using (var s = new StreamReader(File.OpenRead(path)))
            {
                jsonString = s.ReadToEnd();
            }

            try
            {
                param = Funcs.DeserializeJson<T>(jsonString);
            }
            catch (Exception ex)
            {
                param = new T();
                Console.WriteLine(ex.ToString());
                return false;
            }

            return true;

        }

        public static bool SaveData<T>(string fileName, T param)
        {

            string root = Funcs.GetAppDataDirectory();
            string path = Path.Combine(root, fileName);
            string tempPath = path + ".temp";

            string jsonString = Funcs.SerializeJson(param);

            using (var sw = new StreamWriter(File.OpenWrite(tempPath)))
            {
                sw.Write(jsonString);
            }
            File.Copy(tempPath, path, true);
            File.Delete(tempPath);

            return true;

        }

※エラー処理は省略

以上!

コメント

タイトルとURLをコピーしました