首页 > 解决方案 > 在 C# 中保存应用程序配置的最佳方式

问题描述

我有一个Configuration类存储某些用作设置的变量。而且我正在努力寻找最简单和最优化的方式将其保存到文件中——如果用户每次都必须配置它会很奇怪。

示例类:

public static Configuration 
{
   public static bool A = false;
   public static bool B = false;
   public static int C = 100;
}

序列化集合不是问题,但我不能真正从这些变量中进行集合,因为它们没有匹配的数据类型。

我确定解决方案很简单,但由于某种原因我被困在这里。

标签: c#.net

解决方案


详细说明我的评论,您最好将静态类转换为实例类,以最大限度地减少手动编码以在将来存储/读取属性值。这种重构可以在几分钟内完成。因此,作为第一步,它应该不会花费太长时间,并且一个简单的“查找/替换”可以修复您之前使用“配置”的代码中所有位置的所有声明。

  1. 保持您的实现静态,但更改为您正在访问的单个实例。
public class Configuration
{
    private static Configuration instance;
    public static Configuration Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Configuration();
            }
            return instance;
        }
        set
        {
            instance = value;
        }
    }

    public bool A { get; set; }
    public bool B { get; set; }
    public int C { get; set; }
}
  1. 在您声明静态类的地方执行查找/替换并替换“配置”。与“配置。实例。”。此外,在您之前声明的静态属性(例如public static bool A; public static bool B; ...仅选择所有文本)的地方,执行查找/替换并将“静态”替换为“”。
  2. 保存/读取您的数据
// To Save
File.WriteAllText(@"c:\temp\myconfig.json", Newtonsoft.Json.JsonConvert.SerializeObject(Configuration.Instance));

// To Read
using (var file = File.OpenText(@"c:\temp\myconfig.json"))
{
    JsonSerializer serializer = new JsonSerializer();
    Configuration.Instance = (Configuration)serializer.Deserialize(file, typeof(Configuration));
}

推荐阅读