无法将JSON数据导入gridview

时间:2019-01-24 17:16:16

标签: c# json web-services

我下面有这段代码,我试图将数据position and result放入我的searchlist中,但是当我尝试将其放入此处的代码GridView1.DataSource = list;中时,它总是给我一个错误{{ 1}}我要完成的工作是将System.InvalidOperationException: 'Data source is an invalid type. It must be either an IListSource, IEnumerable, or IDataSource.'中的数据放入我的gridview中。我不确定为什么这种情况持续发生,将不胜感激

Weather and coord

2 个答案:

答案 0 :(得分:2)

  

我要完成的工作是将来自Weather的数据并协调到我的gridview中。

如果要在网格中包含所有数据,则需要将其投影为包含所有内容的类型。

using System.Linq;

//...

//... code removed for brevity 

var list = json.Deserialize<SearchList>(resString);

var data = list.weather.Select(item => new {
    lon = list.coord.lon,
    lat = list.coord.lat,
    id = item.id,
    main = item.main,
    description = item.description,
    icon = item.icon
});

GridView1.DataSource = data;
GridView1.DataBind();

//... code removed for brevity

这意味着lon属性中的每个项目都将重复latweather

如果要单独显示这些属性,请填充另一个控件。

答案 1 :(得分:0)

list只是SearchList的一个实例,因此没有实现IEnumerable或异常中提到的其他接口(实际上是任何ListArray或其他强类型集合)。

如果要在网格中显示坐标,则它们应该是Result类型的属性。

 GridView1.DataSource = list.weather;
 GridView1.DataBind();

如果仅打算显示一个坐标,则应重新考虑控件的选择或添加其他控件,例如Label

[coords] {list.Position} - Label
[id, name, description, icon] {list.weather[0]} - GridViewRow
[id, name, description, icon] {list.weather[1]} - GridViewRow
[id, name, description, icon] {list.weather[2]} - GridViewRow