如何将C#串口设置保存到JSON文件,实现重启后复用?
C#串口配置保存与自动加载实现方案
用JSON文件存储串口配置完全合适——它轻量易读,且C#有成熟的序列化/反序列化工具,对新手友好,是存储这类简单应用配置的首选方案。下面直接给你可复用的修改代码,步骤清晰易上手:
1. 第一步:定义配置实体类
先创建一个类来统一存储串口的各项设置,方便后续序列化操作:
public class SerialPortSettings { // 对应你的串口设置项,可根据实际需求增减 public string PortName { get; set; } public int BaudRate { get; set; } public int DataBits { get; set; } = 8; // 默认值 public string StopBits { get; set; } = "One"; public string Parity { get; set; } = "None"; }
2. 第二步:编写配置读写方法
在你的窗体类中添加以下方法,负责处理配置的保存和加载(用.NET自带的System.Text.Json,无需额外安装包):
// 获取配置文件的存储路径(存在用户AppData目录,避免权限问题) private string GetConfigFilePath() { string appDataDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string appFolder = Path.Combine(appDataDir, "SerialPortConfigApp"); Directory.CreateDirectory(appFolder); // 文件夹不存在则自动创建 return Path.Combine(appFolder, "settings.json"); } // 保存配置到JSON文件 private void SaveSettings(SerialPortSettings settings) { string jsonContent = JsonSerializer.Serialize(settings, new JsonSerializerOptions { WriteIndented = true }); File.WriteAllText(GetConfigFilePath(), jsonContent); } // 从JSON文件加载配置 private SerialPortSettings LoadSettings() { string configPath = GetConfigFilePath(); if (!File.Exists(configPath)) { // 文件不存在时返回默认配置 return new SerialPortSettings(); } string jsonContent = File.ReadAllText(configPath); return JsonSerializer.Deserialize<SerialPortSettings>(jsonContent) ?? new SerialPortSettings(); }
3. 第三步:在窗体事件中调用方法
(1)窗体启动时自动加载配置
找到窗体的Load事件(双击窗体空白处即可生成),添加代码将配置赋值给你的控件:
private void MainForm_Load(object sender, EventArgs e) { SerialPortSettings savedSettings = LoadSettings(); // 假设你的控件名称分别为cboPortName(端口选择)、nudBaudRate(波特率输入) cboPortName.Text = savedSettings.PortName; nudBaudRate.Value = savedSettings.BaudRate; // 其他控件同理赋值 cboDataBits.Text = savedSettings.DataBits.ToString(); cboStopBits.Text = savedSettings.StopBits; cboParity.Text = savedSettings.Parity; }
(2)用户确认设置时保存配置
比如在“确认”或“应用”按钮的点击事件中,保存当前控件的设置:
private void btnConfirm_Click(object sender, EventArgs e) { SerialPortSettings currentSettings = new SerialPortSettings { PortName = cboPortName.Text, BaudRate = (int)nudBaudRate.Value, DataBits = int.Parse(cboDataBits.Text), StopBits = cboStopBits.Text, Parity = cboParity.Text }; SaveSettings(currentSettings); MessageBox.Show("配置已保存,重启后自动生效"); }
4. 最后:添加必要的命名空间
在窗体类的顶部补充以下引用,避免编译报错:
using System; using System.IO; using System.Text.Json; using System.Windows.Forms;
如果你用的是.NET Framework(而非.NET Core/.NET 5+),
System.Text.Json可能不可用,此时可以安装Newtonsoft.JsonNuGet包,然后将序列化/反序列化代码替换为:
- 保存:
string jsonContent = JsonConvert.SerializeObject(settings, Formatting.Indented);- 加载:
return JsonConvert.DeserializeObject<SerialPortSettings>(jsonContent) ?? new SerialPortSettings();
同时添加命名空间using Newtonsoft.Json;
内容的提问来源于stack exchange,提问作者Hande
相关产品推荐
相关产品推荐

