如何从json数组中提取数据并将其放入数据gridview C#

时间:2019-10-27 11:25:25

标签: c# arrays json winforms

我正在尝试将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/...

1 个答案:

答案 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列的属性,除非您想要自定义标题,例如大写命名等;定义取自数据源): enter image description here