如何在来自HttpWebResponse的c#windows应用程序中的dataGridView中显示Json DATA

use*_*111 4 c# json datagridview winforms deserialization

json数据,我来自 HTTPWebResponse

[{ "testId":1, "测试名": "HTML", "MinScore是":20, "得分":40, "日期": "2014年12月2日", "状态": "通过"},{ "testId":1, "测试名": "JAVA", "MinScore是":20, "分数":10, "日期": "2014年12月2日", "状态": "FAILED"}]


HttpResponseMessage Response = await client.PostAsync("http://motivtechindia.com/quiz/ws/empquizs", content);
int statusCode = (int)Response.StatusCode;
string results = await Response.Content.ReadAsStringAsync();
MessageBox.Show(results);`enter code here`
Run Code Online (Sandbox Code Playgroud)

___________________________________________________________________________________________消息框显示:

[{ "testId":1, "测试名": "HTML", "MinScore是":20, "得分":40, "日期": "2014年12月2日", "状态": "通过"},{ "testId":1, "测试名": "JAVA", "MinScore是":20, "分数":10, "日期": "2014年12月2日", "状态": "FAILED"}]


现在请告诉我如何deserilise并在datagridview中显示它!

Mik*_*oud 28

所以这很简单:

  1. 声明要反序列化的类.
  2. 抓住Json.NET NuGet包.
  3. 反序列化字符串.
  4. 绑定DataGridView.

声明要反序列化的类

public class JsonResult
{
    public int testId { get; set; }
    public string testName { get; set; }
    public int minScore { get; set; }
    public int score { get; set; }
    public DateTime date { get; set; }
    public string status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

抓住Json.NET NuGet包

Json.NET从这里拉入NuGet包http://www.nuget.org/packages/Newtonsoft.Json/6.0.3.

反序列化字符串

var result = JsonConvert.DeserializeObject<List<JsonResult>>(input);
Run Code Online (Sandbox Code Playgroud)

绑定 DataGridView

dataGridView.DataSource = result;
Run Code Online (Sandbox Code Playgroud)

注意:这是绑定到网格的最原始的方式.您可以利用更多选项.想到的是,关闭AutoGenerateColumns并定义自己的列; 设计师驱动的工作,所以它不会影响我提供的代码.


小智 7

有一种更简单的方法可以做到这一点。您不需要创建一个新类。只需执行以下操作:

DataTable dataTable = (DataTable)JsonConvert.DeserializeObject(jsonString, (typeof(DataTable)));
dataGridView.DataSource = dataTable;
Run Code Online (Sandbox Code Playgroud)

不需要自定义类。不过,您仍然需要 Newtonsoft。