2016-11-22 15 views
2

ユーザーからの入力を受け付けるWindowsフォームアプリケーションでdatagridviewを使用しています。私はこの入力を保存するためにJSONを使用したいと思いますし、datagridviewからの入力を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を配列やリストなどに変換する必要がありますか?

+0

あなたはフォームコントロールをフォームに変換しますが、このコントロールが提示するデータを変換する必要があります。答えのために、あなたは 'DataGridView'にデータを挿入する方法を提供する必要があります。 – Fabio

+0

@Fabioデータはユーザによって挿入され、datagridviewはそのデータを他の場所で取得しません。 datagridviewは、データが挿入されるメソッドです。 – bucketman

+0

ビューではなく、データを常にシリアル化します。ドキュメントを読むことから、DataGridView.DataSourceはシリアル化するオブジェクトであるようです。 – Skynet

答えて

3

データを常にシリアル化するtselfとビューではない。

この場合、DataGridViewDataSourceプロパティをシリアル化する必要があります。

1

Windowsフォームコントロールではなく、データのみを変換する必要があります。その後、コレクションを作成し、後で

private void button1_Click(object sender, EventArgs e) 
{ 
    string output = JsonConvert.SerializeObject(_data); 
    System.IO.File.WriteAllText("json.json", output); 
} 
をシリアル化することができます 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; 
    } 
} 

に割り当てDataGridView

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

に1行の情報を表すクラスを作成するには

私の提案

関連する問題