gpt4 book ai didi

c# - 使用第三方 API 数据源绑定(bind)数据网格

转载 作者:行者123 更新时间:2023-11-30 16:01:03 25 4
gpt4 key购买 nike

我正在使用 C# 4.5。我创建了一个 Windows 应用程序。

根据项目要求,我需要将返回json 对象数组的第三方api 响应绑定(bind)到datagrid 中。

我使用 RestClient 获取数据并使用 JDynamic 包将它们转换为对象

IRestResponse response = client.Execute(request);                 
dynamic result = new JDynamic(response.Content);

有什么技术可以将这个对象数组绑定(bind)为 gridview 的数据源吗?

此外,如果我只需要显示某些列怎么办?

编辑:


JSON 响应类似于:

[
{
"id": 7,
"username": "pthakur@abc.com",
"first_name": "Carlos",
"middle_name": "",
"last_name": "Alaiz",
"gender": "male",
"addr1": "",
"addr2": "",
"state": "",
"city": "",
"country": "",
"post_code": "",
"email_id": "pthakur@abcd.com",
"email_id_alt": "",
"phone1": "1800777333",
"phone2": "",
"photo": "2015-09-09-17-14-29-2015-01-22-06-26-15-400-don-passport-lighting-test 044-3-100pc_pp-ps.jpg",
"populations": [{
"id": 8,
"population_name": "Pop 8"
}]
},
{
"id": 8,
"username": "shailesh.lakum@abc.com",
"first_name": "Pedro",
"middle_name": "",
"last_name": "Montero",
"gender": "male",
"addr1": "",
"addr2": "",
"state": "",
"city": "",
"country": "",
"post_code": "",
"email_id": "pedro@spam4.me",
"email_id_alt": "",
"phone1": "1800999222",
"phone2": "",
"photo": "2015-09-09-17-13-40-2014-10-27-06-59-56-bilde.jpeg",
"populations": [{
"id": 8,
"population_name": "Pop 8"
}]
},
{
"id": 9,
"username": "mario@abcd.com",
"first_name": "Mario",
"middle_name": "",
"last_name": "Sanz",
"gender": "male",
"addr1": "",
"addr2": "",
"state": "",
"city": "",
"country": "",
"post_code": "",
"email_id": "mario@xyz.com",
"email_id_alt": "",
"phone1": "1800288299",
"phone2": "",
"photo": "2015-09-09-17-13-17-2014-10-27-06-28-30-Jim-Smith.jpg",
"populations": [{
"id": 7,
"population_name": "Pop 7"
}]
},
{
"id": 10,
"username": "pthakur@xyz.com",
"first_name": "Parikshit",
"middle_name": "",
"last_name": "Thakur",
"gender": "male",
"addr1": "",
"addr2": "",
"state": "",
"city": "",
"country": "",
"post_code": "",
"email_id": "pthakur1@xyz.com",
"email_id_alt": "",
"phone1": "1800299200",
"phone2": "",
"photo": "2015-09-10-11-52-05-parikshit.jpg",
"populations": [{
"id": 8,
"population_name": "Pop 8"
}]
},
{
"id": 11,
"username": "nidhi.patel1234@xyz.com",
"first_name": "Nidhi ",
"middle_name": "",
"last_name": "Patel",
"gender": "female",
"addr1": "",
"addr2": "",
"state": "",
"city": "",
"country": "",
"post_code": "",
"email_id": "nidhi@spam4.me",
"email_id_alt": "",
"phone1": "1800200300",
"phone2": "",
"photo": "female.jpg",
"populations": []
}
]

我为它创建了一个新类,如下所示:

namespace DemoAutoLogin
{
public class patient
{
public int id { get; set; }
public string username { get; set; }
public string first_name { get; set; }
public string middle_name { get; set; }
public string last_name { get; set; }
public string gender { get; set; }
public string addr1 { get; set; }
public string addr2 { get; set; }
public string state { get; set; }
public string city { get; set; }
public string country { get; set; }
public string post_code { get; set; }
public string email_id { get; set; }
public string email_id_alt { get; set; }
public string phone1 { get; set; }
public string phone2 { get; set; }
public string photo { get; set; }
public List<Population> populations { get; set; }
}

public class Population
{
public int id { get; set; }
public string population_name { get; set; }
}
}

现在,我该怎么做才能在 GridView 中显示 JSON 记录?

最佳答案

然后您可以简单地将结果反序列化为 IEnumerable<patient> .为此使用 Json.NET。 IEnumerable<patient>你可以绑定(bind)到网格。

public void BindMyData()
{
IEnumerable<patient> patients = JsonConvert.DeserializeObject<IEnumerable<patient>>(resultAsJson);
datagrid.DataSource = patients;
}

应该这样工作..

如果你没有poco:

public void BindMyData()
{
IEnumerable<Dictionary<string, object>> patients = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(resultAsString);
// if this works, i'm not sure:
datagrid.DataSource = patients;
}

如果你不能将 IEnumerable<Dictionary<string, object>> 装箱到网格,你也许可以绑定(bind)一个数据表。添加此 ToDataTable扩展名:

public static class Exts
{
public static DataTable ToDataTable(this IEnumerable<Dictionary<string, object>> list)
{
DataTable result = new DataTable();
if (!list.Any())
return result;

var columnNames = list.SelectMany(dict => dict.Keys).Distinct();
result.Columns.AddRange(columnNames.Select(c => new DataColumn(c)).ToArray());
foreach (var item in list)
{
var row = result.NewRow();
foreach (var key in item.Keys)
row[key] = item[key];

result.Rows.Add(row);
}

return result;
}

}

然后这样绑定(bind):

public void BindMyData()
{
IEnumerable<Dictionary<string, object>> patients = JsonConvert.DeserializeObject<List<Dictionary<string, object>>>(resultAsString);
datagrid.DataSource = patients.ToDataTable();
}

关于c# - 使用第三方 API 数据源绑定(bind)数据网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com