将 dataGridView 序列化为 JSON

Posted

技术标签:

【中文标题】将 dataGridView 序列化为 JSON【英文标题】:Serialize dataGridView to 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 似乎已经成功了,请随时将其添加为解决方案,我会将其标记为已解决。 【参考方案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 属性。

【讨论】:

以上是关于将 dataGridView 序列化为 JSON的主要内容,如果未能解决你的问题,请参考以下文章

C# XML 反序列化为一张表中的 DataSet

将 Python namedtuple 序列化为 json

如何将对象序列化为字符串

Symfony 序列化器:将 Json 反序列化为实体

将枚举成员序列化为 JSON

将 Python 字典序列化为 XML [关闭]