using System.IO;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
namespace TJAPlayer3
{
///
/// 設定ファイル入出力クラス。
///
public static class ConfigManager
{
private static readonly JsonSerializerSettings Settings =
new JsonSerializerSettings()
{
ObjectCreationHandling = ObjectCreationHandling.Auto,
DefaultValueHandling = DefaultValueHandling.Include,
// ContractResolver = new CamelCasePropertyNamesContractResolver(),
NullValueHandling = NullValueHandling.Ignore,
MissingMemberHandling = MissingMemberHandling.Ignore,
Converters = new StringEnumConverter[] { new StringEnumConverter() }
};
///
/// 設定ファイルの読み込みを行います。ファイルが存在しなかった場合、そのクラスの新規インスタンスを返します。
///
/// シリアライズしたクラス。
/// ファイル名。
/// デシリアライズ結果。
public static T GetConfig(string filePath) where T : new()
{
var json = "";
if (!System.IO.File.Exists(filePath))
{
// ファイルが存在しないので
SaveConfig(new T(), filePath);
}
using (var stream = new System.IO.StreamReader(filePath, Encoding.UTF8))
{
json = stream.ReadToEnd();
}
return JsonConvert.DeserializeObject(json, Settings);
}
///
/// 設定ファイルの書き込みを行います。
///
/// シリアライズするインスタンス。
/// ファイル名。
public static void SaveConfig(object obj, string filePath)
{
(new FileInfo(filePath)).Directory.Create();
using (var stream = new System.IO.StreamWriter(filePath, false, Encoding.UTF8))
{
stream.Write(JsonConvert.SerializeObject(obj, Formatting.Indented, Settings));
}
}
}
}