将 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】:始终序列化数据本身而不是视图。
在这种情况下,您必须序列化DataGridView
的DataSource
属性。
【讨论】:
以上是关于将 dataGridView 序列化为 JSON的主要内容,如果未能解决你的问题,请参考以下文章