我正在尝试将json中的所有名称和href值放入数据gridview中,并被卡住。目前,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/...
答案 0 :(得分:1)
让我们从反序列化请求确实不正确这一事实开始。您真正需要的(根据您的定义)是:
// 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或自定义控件),在更新UI之前,您可能还需要为DataGridView设置正确的列和数据属性。
例如,WinForms(无需弄乱DataGridView列的属性,除非您想要自定义标题,例如大写命名等;定义取自数据源):