1
0
mirror of synced 2024-11-28 17:31:00 +01:00
OpenTaiko/TJAPlayer3/Common/ConfigManager.cs

61 lines
2.4 KiB
C#

using System.IO;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
namespace TJAPlayer3
{
/// <summary>
/// 設定ファイル入出力クラス。
/// </summary>
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() }
};
/// <summary>
/// 設定ファイルの読み込みを行います。ファイルが存在しなかった場合、そのクラスの新規インスタンスを返します。
/// </summary>
/// <typeparam name="T">シリアライズしたクラス。</typeparam>
/// <param name="filePath">ファイル名。</param>
/// <returns>デシリアライズ結果。</returns>
public static T GetConfig<T>(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<T>(json, Settings);
}
/// <summary>
/// 設定ファイルの書き込みを行います。
/// </summary>
/// <param name="obj">シリアライズするインスタンス。</param>
/// <param name="filePath">ファイル名。</param>
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));
}
}
}
}