首页 > 解决方案 > 如何从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/...

标签: c#arraysjsonwinforms

解决方案


让我们从您的反序列化请求并不正确的事实开始。您真正需要的(根据您的定义)是:

// 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 列属性;定义取自数据源): 在此处输入图像描述


推荐阅读