You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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.Json NuGet包,然后将序列化/反序列化代码替换为:

  • 保存:string jsonContent = JsonConvert.SerializeObject(settings, Formatting.Indented);
  • 加载:return JsonConvert.DeserializeObject<SerialPortSettings>(jsonContent) ?? new SerialPortSettings();
    同时添加命名空间using Newtonsoft.Json;

内容的提问来源于stack exchange,提问作者Hande

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:35:19