C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置

时间:2023-03-09 08:23:09
C#   对象实例化 用json保存 泛型类 可以很方便的保存程序设置
用于永久化对象,什么程序都行,依赖NewtonSoft。用于json序列化和反序列化。
 using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConfigHandler
{
public class ConfigHandler<T>
where T : class
{
const string SAVE_PATH = "jsonconfig/";
/// <summary>
/// 单例模式
/// </summary>
static T config;
private ConfigHandler()
{ }
/// <summary>
/// 获取保存地址,默认是泛型参数T的类型名称
/// </summary>
/// <returns></returns>
private static string GetSavePath()
{
if (!Directory.Exists(SAVE_PATH))
{
Directory.CreateDirectory(SAVE_PATH);
}
return $"{SAVE_PATH}{typeof(T).ToString()}.json";
}
/// <summary>
/// 保存配置
/// </summary>
public static void Save(T _config)
{
config = _config;
string json = JsonConvert.SerializeObject(_config);
try
{
using (var sw = new StreamWriter(GetSavePath()))
{
sw.WriteAsync(json);
} }
catch (Exception)
{
throw;
}
}
/// <summary>
/// 获取配置信息
/// </summary>
/// <returns></returns>
public static T Load()
{
if (config == null)
{
string json = "";
try
{
using (var sr = new StreamReader(GetSavePath()))
{
json = sr.ReadToEnd();
if (json != "")
{
config = JsonConvert.DeserializeObject<T>(json);
}
else
{
config = null;
}
}
}
catch (Exception)
{
config = null;
}
}
return config;
} } }

demo:

using ConfigHandler;
using ConsoleApplication1;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
MyConfig config = new MyConfig();
config = new MyConfig();
config.name = "leiming";
config.Age = ;
config.Time = DateTime.Now;
ConfigHandler<MyConfig>.Save(config);
config = ConfigHandler<MyConfig>.Load();
Console.WriteLine(config.ToString());
Console.ReadKey();
}
}
class MyConfig
{
public int Hello{get;set;}
public string name { get; set; }
public int Age { get; set; }
public DateTime Time { get; set; }
public override string ToString()
{
return $"Name={name},Age={Age},Time={Time.ToShortDateString()}";
}
}
}