文章目录
- json
- 参数保存
txt阅读器系列:
- 需求分析和文件读写
- 目录提取类💎列表控件与目录💎快捷键翻页
- 字体控件绑定💎前景/背景颜色
- 书籍管理系统💎用树形图管理书籍
- 语音播放💎播放进度显示💎快进快退💎自定义语速控件💎Binding
- 文本清理的布局💎段落合并💎编码检测
json
每个人都有不同的阅读偏好,有的人喜欢大字体,不伤眼;有的人喜欢读小字,读的快,如果每次打开软件,其基本配置是一层不变的,那么每次打开都要设置一次,十分麻烦。
为了解决这个问题,可以通过配置文件,将参数保存下来,而存储文件的格式,推荐选择json
,一种天然的键值对协议格式。C#
中封装了System.Text.Json
,但目前来说并不完善,为了更好的体验,需要需要在NuGet
中搜索添加经典的NewtonSoft.Json
,。
在Newtonsoft.Json
中,函数JsonConvert.DeserializeObject
可以将泛型变量设为字典,下面举一个例子
using Newtonsoft.Json;
var dct = JsonConvert.DeserializeObject<Dictionary<string, string>>(js);
foreach (var item in dct)
Console.WriteLine($"{item.Key}:{item.Value}");
结果为
Date:2023-05-11T15:54:46.2907782+08:00
Temperature:25
Summary:Hot
相应地,将字典编写为json
格式字符串,可通过JsonConvert.SerializeObject
来实现
var dct = new Dictionary<string, string>()
{
{"Date", DateTime.Now.ToString("f") },
{"Temp", "25" },
{"Summary", "Hot" }
};
string js = JsonConvert.SerializeObject(dct);
Console.WriteLine(js);
效果为
{"Date":"2023年5月11日 16:44","Temp":"25","Summary":"Hot"}
参数保存
目前这个软件尚未完成,其参数面板如下,这里面所有已经实现的功能,都可以加入到参数列表中。
由于我们目前并没有一个可供加载的参数文件,所以先写保存参数的逻辑。
private void saveParaJson(string filePath)
{
var dct = new Dictionary<string, string>()
{
{"字体", cbFont.Text },
{"尺寸", sFontSize.ToString() },
{"前景", cbForeColor.Text},
{"背景", cbBgColor.Text },
{"音量", sSoundVolume.ToString() },
{"语速", sSpeechRate.ToString() },
{"区域", cbSoundCulture.Text },
{"音源", cbSoundSource.Text },
{"编码", cbEncoding.Text }
};
string js = JsonConvert.SerializeObject(dct, Formatting.Indented);
File.WriteAllText(filePath, js, Encoding.UTF8);
}
其中AdvancdSlider
是自定义的控件,故而在其中添加一个ToString
函数,这样的好处是以后在调用的时候更加方便。
public string ToString()
{
return Value.ToString();
}
接下来整两个按钮,分别是保存参数
和加载参数
,其中保存参数的事件如下
const string FMT_CFG = "配置文件(*.json)|*.json";
private void btnSavePara_Click(object sender, RoutedEventArgs e)
{
var sfd = new SaveFileDialog();
sfd.Filter = FMT_CFG;
if (sfd.ShowDialog() != true) return;
saveParaJson(sfd.FileName);
}