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

C#实现加载本地JSON文件到ListBox并显示选中项属性

WinForm加载本地JSON用户文件到ListBox及选中填充表单实现方案

功能实现前置说明

所有用户JSON文件统一存储在程序运行目录下的Output文件夹,基于你已经实现的UserAccount实体类、JsonMgr序列化工具,分两步完成需求即可。

1. 加载目录下所有JSON文件绑定到ListBox

封装独立的列表刷新方法,在窗体加载、新增用户成功后都可以调用,保证列表实时更新。

private void RefreshUserList()
{
    string outputFolder = Path.Combine(Environment.CurrentDirectory, "Output");
    // 首次运行目录不存在时自动创建,避免路径报错
    if (!Directory.Exists(outputFolder))
    {
        Directory.CreateDirectory(outputFolder);
    }
    // 读取目录下所有.json后缀的文件,构造绑定数据源
    var userFileSource = Directory.GetFiles(outputFolder, "*.json")
        .Select(fullPath => new
        {
            ShowName = Path.GetFileName(fullPath), // ListBox显示内容:带用户名的文件名
            FileFullPath = fullPath // 隐藏存储:文件的完整磁盘路径
        })
        .ToList();
    // 配置ListBox显示字段与值字段,完成绑定
    lstUsers.DisplayMember = "ShowName";
    lstUsers.ValueMember = "FileFullPath";
    lstUsers.DataSource = userFileSource;
}

注意:不要直接把文件名列表绑定到ListBox,存储文件全路径可以避免后续读取时重复拼接路径,减少路径错误概率。

调用时机说明:

  • 在窗体的Load事件中调用一次完成初始加载
  • 在你之前写的新增用户逻辑中,序列化文件成功后、弹出成功提示前加一句RefreshUserList(),就能实时看到新增的用户条目

2. 选中ListBox条目时解析JSON填充表单

给ListBox控件添加SelectedIndexChanged事件,选中项变化时自动读取对应文件、反序列化后填充表单控件。

private void lstUsers_SelectedIndexChanged(object sender, EventArgs e)
{
    // 无选中项时直接返回
    if (lstUsers.SelectedItem == null) return;
    string selectedFile = lstUsers.SelectedValue.ToString();
    // 校验文件是否存在,不存在则刷新列表移除无效条目
    if (!File.Exists(selectedFile))
    {
        MessageBox.Show("选中的用户文件已丢失", "读取错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        RefreshUserList();
        return;
    }
    // 反序列化JSON为UserAccount实体,对应你现有JsonMgr补全反序列化方法即可
    UserAccount currentUser = JsonMgr.DeserializeFromFile<UserAccount>(selectedFile);
    if (currentUser == null)
    {
        MessageBox.Show("用户文件格式损坏,无法解析", "读取错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
        return;
    }
    // 逐个给表单控件赋值
    txtFirstName.Text = currentUser.FirstName;
    txtLastName.Text = currentUser.LastName;
    txtEmail.Text = currentUser.Email;
    txtTeamName.Text = currentUser.TeamName;
    txtPassword.Text = currentUser.Password;
    chkIsActive.Checked = currentUser.IsActive == "Yes";
    txtUserId.Text = currentUser.UserId.ToString();
}

补充说明

如果你的JsonMgr工具类目前只有序列化方法,补充对应的文件反序列化方法即可,逻辑和序列化对应:读取目标文件的全部文本内容,再反序列化为指定的泛型类型对象。额外注意两个细节:

  • 路径拼接统一用Path.Combine()方法处理,避免手动拼接字符串出现多斜杠、少斜杠的路径错误
  • 给txtUserId赋值前不需要额外做复杂类型转换,数字类型调用ToString()即可直接赋值给文本框

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 11:06:33