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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置相关的知识,希望对你有一定的参考价值。

参考页面:

http://www.yuanjiaocheng.net/webapi/test-webapi.html

http://www.yuanjiaocheng.net/webapi/web-api-controller.html

http://www.yuanjiaocheng.net/webapi/config-webapi.html

http://www.yuanjiaocheng.net/webapi/web-api-route.html

http://www.yuanjiaocheng.net/webapi/parameter-binding.html

用于永久化对象,什么程序都行,依赖NewtonSoft。用于json序列化和反序列化。
技术分享
 1 using Newtonsoft.Json;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.IO;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 
 9 namespace ConfigHandler
10 {
11     public class ConfigHandler<T>
12         where T : class
13     {
14         const string SAVE_PATH = "jsonconfig/";
15         /// <summary>
16         /// 单例模式
17         /// </summary>
18         static T config;
19         private ConfigHandler()
20         {
21 
22         }
23         /// <summary>
24         /// 获取保存地址,默认是泛型参数T的类型名称
25         /// </summary>
26         /// <returns></returns>
27         private static string GetSavePath()
28         {
29             if (!Directory.Exists(SAVE_PATH))
30             {
31                 Directory.CreateDirectory(SAVE_PATH);
32             }
33             return $"{SAVE_PATH}{typeof(T).ToString()}.json";
34         }
35         /// <summary>
36         /// 保存配置
37         /// </summary>
38         public static void Save(T _config)
39         {
40             config = _config;
41             string json = JsonConvert.SerializeObject(_config);
42             try
43             {
44                 using (var sw = new StreamWriter(GetSavePath()))
45                 {
46                     sw.WriteAsync(json);
47                 }
48 
49             }
50             catch (Exception)
51             {
52                 throw;
53             }
54         }
55         /// <summary>
56         /// 获取配置信息
57         /// </summary>
58         /// <returns></returns>
59         public static T Load()
60         {
61             if (config == null)
62             {
63                 string json = "";
64                 try
65                 {
66                     using (var sr = new StreamReader(GetSavePath()))
67                     {
68                         json = sr.ReadToEnd();
69                         if (json != "")
70                         {
71                             config = JsonConvert.DeserializeObject<T>(json);
72                         }
73                         else
74                         {
75                             config = null;
76                         }
77                     }
78                 }
79                 catch (Exception)
80                 {
81                     config = null;
82                 }
83             }
84             return config;
85         }
86 
87     }
88 
89 
90 }
View Code

 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 = 20;
            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()}";
        }
    }
}
View Code

 

以上是关于C# 对象实例化 用json保存 泛型类 可以很方便的保存程序设置的主要内容,如果未能解决你的问题,请参考以下文章

C# 泛型类 构造方法中实例化T

java的泛型类怎么实例化对象?

ABP框架 - 介绍 VS2017调试器无法附加到IIS进程(w3wp.exe) c# 动态实例化一个泛型类

c# 泛型学习

C#泛型 类型约束

实例化泛型类时如何避免指定冗余类型