ソフトを作成する時にパラメータの無いソフトを作ることはほとんど無いと思います。
そのためにパラメータをファイルなどに保存してことが多いです。
パラメータの保存/読出もプログラムを記述しなければならないのが普通ですが、
バージョンアップ(ソフト改造)のたびにパラメータ部分のプログラム変更をするのは結構な手間だったりします。
昔そう思い、データクラスを定義したら勝手にその形式で
ファイルに保存するプログラムを書いていました。
今ではライブラリの「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;
}
※エラー処理は省略
以上!
コメント