WPF开发txt阅读器18:用json格式存储配置文件

文章目录

    • 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"}

参数保存

目前这个软件尚未完成,其参数面板如下,这里面所有已经实现的功能,都可以加入到参数列表中。

WPF开发txt阅读器18:用json格式存储配置文件_第1张图片

由于我们目前并没有一个可供加载的参数文件,所以先写保存参数的逻辑。

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);

}

你可能感兴趣的:(.Net,wpf,json,c#,字典,序列化)