c# - 如何从json数组中提取数据并将其放入数据gridview c#
问题描述
我正在尝试将 json 中的所有名称和 href 值获取到数据网格视图中并且卡住了。目前,gridview 保持空白。任何想法如何填充gridview?
JSON:
{
"layers": {
"layer": [
{
"name": "tiger:giant_polygon",
"href": "http://localhost:8080/geoserver/rest/layers/tiger%3Agiant_polygon.json"
},
{
"name": "tiger:poi",
"href": "http://localhost:8080/geoserver/rest/layers/tiger%3Apoi.json"
},
{
"name": "tiger:poly_landmarks",
"href": "http://localhost:8080/geoserver/rest/layers/tiger%3Apoly_landmarks.json"
},
{
"name": "tiger:tiger_roads",
"href": "http://localhost:8080/geoserver/rest/layers/tiger%3Atiger_roads.json"
}
]
}
}
班级:
class geoserverLayerName
{
public class Layer
{
public string name { get; set; }
public string href { get; set; }
}
public class Layers
{
public List<Layer> layer { get; set; }
}
public class RootObject
{
public Layers layers { get; set; }
}
}
反序列化:
private void deserialiseJSON(string strJSON)
{
try
{
var jPerson = JsonConvert.DeserializeObject<Layers>(strJSON);
dgwLayers.DataSource = jPerson.layer;
}
catch(Exception ex)
{
debugOutputJSON("We had a problem: " + ex.Message.ToString());
}
}
这就是我希望填充网格视图的方式:
Name: Href:
tiger:giant_polygon http://localhost:8080/...
tiger:poi http://localhost:8080/...
解决方案
让我们从您的反序列化请求并不正确的事实开始。您真正需要的(根据您的定义)是:
// That's the root object holding JSON data
var jPerson = JsonConvert.DeserializeObject<RootObject>(strJSON);
// And that's in "layer" you have a list of layers
dgwLayers.DataSource = jPerson.layers.layer;
我建议你将断点放在 dgwLayers.DataSource = (...); 确保在您的情况下确实发生了反序列化(以防您错过提供一些定义;对于您在我的示例中在 SO 反序列化传递中给出的确切定义)。
根据您用于数据网格视图的确切技术列表(WinForms、WPF、WebForms 或自定义控件),您可能还需要为 DataGridView 设置正确的列和数据属性,在此之前更新 UI。
例如,WinForms(除非您想要自定义标题,如大写命名等,否则无需弄乱 DataGridView 列属性;定义取自数据源):
推荐阅读
- javascript - 我找不到任何关于我的功能不纯的东西
- python - AttributeError:'Map' 对象在folium 中没有属性'simple_marker'
- python - 如何更好地使用 AdaboostClassfier?
- javascript - 构建简单的 2d javascript 游戏,如何阻止游戏离开画布
- php - 做 preg_match 和 preg_replace 的正确方法
- java - 芯片不会以编程方式添加到芯片组
- android - 片段上的警报框
- angular - 只有在 Angular 6 中执行订阅方法的主体(嵌套在 forloop 中订阅)后,for 循环才应进行迭代
- org-mode - 如何在交互式输入标题下捕获注释
- mysql - SQL — 获取 A 列日期与 B 列日期相差 7 天的所有行