c# - 将 JSON 文件加载到 ListBox 和 TextBox C#

标签 c# json listbox

我正在开发 Windows 窗体应用程序。文本框索引可以通过以下代码保存并显示为列表框:

private List<FunctionData> funcParamList = new List<FunctionData>();
  ...
private void addFuncButton_Click(object sender, EventArgs e)
    {
        FunctionData funcParams = new FunctionData();
        funcParams.blabla1name = blabla1.Text;
        funcParams.blabla2name = blabla2.Text;
        ...
        if (funcParams.isValid())
        {
            funcParamList.Add(funcParams);
            functionListBox.Items.Add(functionNameBox.Text);
        } 

我还再次将对象收集到 TextBox 以使用以下代码进行编辑(通过单击 ListBox 项目):

  private void getParams(FunctionData data)
    {
        blabla1.Text = data.blabla1name;
        blabla2.Text = data.blabla2name;
        functionNameBox.Text = data.functionName;
        return;
    }

    private void functionListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (functionListBox.SelectedItem == null) { return; }
        foreach (var obj in funcParamList)
        {
            if (obj.functionName == functionListBox.SelectedItem.ToString())
            {
                getParams(obj);
            }
        }
    }

并将它们保存为 JSON 文件:

private void saveFileButton_Click(object sender, EventArgs e)
    {
        fileName = fileNameBox.Text;
        string jsonFunc = JsonConvert.SerializeObject(funcParamList);
        System.IO.File.WriteAllText(@"<blablapath>\" + fileName + ".txt", jsonFunc);
    }

JSON 文件中有“functionName”对象,我可以用它在 ListBox 上显示。

我的问题是:如何加载此文件购买 native 加载/打开文件对话框并在列表框中显示对象并再次编辑它们?

这里是我尝试使用以下代码实现它的方法,但它不起作用:

private void loadFileButton_Click(object sender, EventArgs e)
    {
        OpenFileDialog loadFileDialog = new OpenFileDialog();
        ...

        if (loadFileDialog.ShowDialog() == DialogResult.OK)
        {
            string jsonFileName = loadFileDialog.FileName;
            string jsonFile = File.ReadAllText(jsonFileName);

            dynamic loadedFile = JsonConvert.DeserializeObject(jsonFile);

            //if (functionListBox.SelectedItem == null) { return; }
            foreach (var obj in loadedFile)
            {
                if (obj.functionName != null) 
                {
                    functionListBox.Items.Add(obj.functionName);
                    getParams(obj);   // I get exception here
                    funcParamList.Add(loadedFile);
                    functionListBox.Refresh();
                }

            }
        }

最佳答案

我通过将“DeserializeObject”转换为 List 解决了这个问题,并且完成了。这里的变化:

            ...

            var loadedFile = JsonConvert.DeserializeObject<List<FunctionData>>(jsonFile);

关于c# - 将 JSON 文件加载到 ListBox 和 TextBox C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36498501/

相关文章:

javascript - 如何在 Javascript 中解析以下 JSON?

c# - 双击打开文件c#

python - 如何将 urwid.BigText 放入 urwid.ListBox

Java-分部获取Json

json - NotSerializableException与Spark上的json4s

C# - 按字母顺序对列表框进行排序

c# - 为什么 HtmlAgilityPack for .NET Core 1.5.0.1 找不到 HtmlWeb?是否有已知的解决方法或正确/更好的方法来做到这一点?

c# - 在表单之间传递数据

c# - 为什么 ThreadPool 线程不打印任何内容到控制台,除非主线程先打印

c# - ASP.NET MVC 上的 Rotativa HTML 转 PDF : how to create PDF as a landscape?