【问题标题】:Serialize dataGridView to JSON将 dataGridView 序列化为 JSON
【发布时间】:2017-04-06 03:03:17
【问题描述】:

我的 Windows 窗体应用程序上有一个数据网格视图,它接受用户的输入。我想使用 JSON 来存储此输入,并尝试将 datagridview 中的输入序列化为 JSON。

到目前为止,我有:

        private void button2_Click(object sender, EventArgs e)
    {

        string output = JsonConvert.SerializeObject(this.dataGridView1);
        System.IO.File.WriteAllText("json.json", output);
    }

但是,在尝试序列化 datagridview 时似乎出了点问题(之前我的印象是任何对象都可以转换?)。这是否意味着我必须先将 datagridview 转换为数组或列表或类似的东西才能序列化它?

【问题讨论】:

  • 你转换windows窗体控件,但是你想转换这个控件呈现的数据。对于答案,您需要提供如何在DataGridView 中插入数据的信息
  • @Fabio 正如我所说,数据是由用户插入的,datagridview 不会在其他地方获取数据。 datagridview 是插入数据的方法。
  • 总是序列化数据,而不是视图。从阅读文档看来,DataGridView.DataSource 是您要序列化的对象。
  • @Skynet 似乎已经成功了,请随时将其添加为解决方案,我会将其标记为已解决。

标签: c# json serialization datagridview jsonserializer


【解决方案1】:

您只想转换数据,而不是 Windows 窗体控件。

我的建议是创建一个代表DataGridView 中的一行信息的类

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

然后创建集合并将其分配给DataGridView.DataSource

public partial class YourForm : Form
{
    private readonly BindingList<Person> _data;

    public YourForm()
    {
        InitializeComponent();

        // Create empty collection/datasource
        _data = new BindingList<Person>();

        // This line will generate columns automatically if
        // DataGridView.AutoGenerateColumns = true (by default it is true)
        this.yourDataGridView.DataSource = _data;
    }
}

以后可以序列化

private void button1_Click(object sender, EventArgs e)
{
    string output = JsonConvert.SerializeObject(_data);
    System.IO.File.WriteAllText("json.json", output);
}

【讨论】:

    【解决方案2】:

    始终序列化数据本身而不是视图。

    在这种情况下,您必须序列化DataGridViewDataSource 属性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 2021-12-29
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多