c# - 在 C# 中保存应用程序配置的最佳方式
问题描述
我有一个Configuration
类存储某些用作设置的变量。而且我正在努力寻找最简单和最优化的方式将其保存到文件中——如果用户每次都必须配置它会很奇怪。
示例类:
public static Configuration
{
public static bool A = false;
public static bool B = false;
public static int C = 100;
}
序列化集合不是问题,但我不能真正从这些变量中进行集合,因为它们没有匹配的数据类型。
我确定解决方案很简单,但由于某种原因我被困在这里。
解决方案
详细说明我的评论,您最好将静态类转换为实例类,以最大限度地减少手动编码以在将来存储/读取属性值。这种重构可以在几分钟内完成。因此,作为第一步,它应该不会花费太长时间,并且一个简单的“查找/替换”可以修复您之前使用“配置”的代码中所有位置的所有声明。
- 保持您的实现静态,但更改为您正在访问的单个实例。
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; }
}
- 在您声明静态类的地方执行查找/替换并替换“配置”。与“配置。实例。”。此外,在您之前声明的静态属性(例如
public static bool A; public static bool B; ...
仅选择所有文本)的地方,执行查找/替换并将“静态”替换为“”。 - 保存/读取您的数据
// 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));
}
推荐阅读
- android - 使用 Dagger 2 找不到符号 ViewModel
- java - 在边界之间查找数组中所有整数的最快方法
- javascript - 带有 PHP 和单独服务器的聚合物
- amazon-web-services - 我无法使用 AWS AD 凭证连接到 AWS 实例
- vue.js - vee-validate 的基本示例不起作用
- java - 将节点解析为 FXML
- google-sheets - 从单元格中的逗号分隔列表中删除重复的字符串
- linux - jq 是否可以在设置新值时使用已删除的值?
- javascript - 按相等的两个键对对象数组进行排序
- laravel - 雄辩,从嵌套关系查询中检索结果