Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何更改json以便使用它填充datagridview_C#_Json_Datagridview - Fatal编程技术网

C# 如何更改json以便使用它填充datagridview

C# 如何更改json以便使用它填充datagridview,c#,json,datagridview,C#,Json,Datagridview,我得到的json不适合填充datagridview(我想)。我试图利用我通过搜索得到的答案,但我仍然没有设法解决这个问题 这就是我获取json的方式 using (var client = new WebClient()) { var values = new NameValueCollection(); values["apikey"] = "my apikey"; string destination

我得到的json不适合填充
datagridview
(我想)。我试图利用我通过搜索得到的答案,但我仍然没有设法解决这个问题

这就是我获取json的方式

 using (var client = new WebClient())
        {
            var values = new NameValueCollection();
            values["apikey"] = "my apikey";
            string destination = @"http://www.";
            var response = client.UploadValues(destination, values);
            string responseString = Encoding.Default.GetString(response);
这就是我得到的回报,并投入到责任预算中

{"error":"","return":{"key":"value","key":"value","key":"value"}}
以及填充
datagridview
的最终代码

var result = JsonConvert.DeserializeObject<List<JsonResult>>(responseString);
dataGridView1b.DataSource = result;

那么,我如何让我的json自动更改并使用它填充我的datagridview。

Newtonsoft试图告诉您的是,它无法将您的
json对象
强制转换为
json数组

正如我从您的
Json
响应中看到的,您正在接收一个
Json
字符串,如下所示:

{"error":"","return":{"key":"value","key":"value","key":"value"}}
因此,到目前为止,代码中发生了两件事:

  • responseString
    中接收的字符串显然是
    对象
    ,而不是
    数组
  • 可反序列化的
    JsonResult
    属性位于上述JSON字符串中的
    return
    键处(如果我认为正确的话)
  • 因此,我们可以将字符串解析为
    JObject
    (使用
    Newtonsoft.Json.Linq
    扩展名),然后获取字符串中的
    return
    标记值,并将其解析为
    JsonResult
    对象/数组

    var jobj = JsonConvert.DeserializeObject<JObject>(responseString);
    var jsString = jobj["return "].ToString(); //here you have to make sure that the key name is specified correctly.
    var token = JToken.Parse(jsString);
    //now determine wither the recieved string is an object or an array
    if (token is JArray)
    {
         var results = token.ToObject<List<JsonResult>>();
         dataGridView1b.DataSource = results;
    }
    else if (token is JObject)
    {
        var result = token.ToObject<JsonResult>();
        var results = new List<JsonResult>();
        results.Add(result);
        dataGridView1b.DataSource = results;
    }        
    
    var jobj=JsonConvert.DeserializeObject(responseString);
    var jsString=jobj[“return”].ToString()//在这里,您必须确保正确指定了密钥名称。
    var token=JToken.Parse(jsString);
    //现在确定接收的字符串是对象还是数组
    if(标记为JArray)
    {
    var results=token.ToObject();
    dataGridView1b.DataSource=结果;
    }
    else if(标记为JObject)
    {
    var result=token.ToObject();
    var results=新列表();
    结果。添加(结果);
    dataGridView1b.DataSource=结果;
    }        
    
    Newtonsoft试图告诉您的是,它无法将您的
    JSON对象
    强制转换为
    JSON数组

    正如我从您的
    Json
    响应中看到的,您正在接收一个
    Json
    字符串,如下所示:

    {"error":"","return":{"key":"value","key":"value","key":"value"}}
    
    因此,到目前为止,代码中发生了两件事:

  • responseString
    中接收的字符串显然是
    对象
    ,而不是
    数组
  • 可反序列化的
    JsonResult
    属性位于上述JSON字符串中的
    return
    键处(如果我认为正确的话)
  • 因此,我们可以将字符串解析为
    JObject
    (使用
    Newtonsoft.Json.Linq
    扩展名),然后获取字符串中的
    return
    标记值,并将其解析为
    JsonResult
    对象/数组

    var jobj = JsonConvert.DeserializeObject<JObject>(responseString);
    var jsString = jobj["return "].ToString(); //here you have to make sure that the key name is specified correctly.
    var token = JToken.Parse(jsString);
    //now determine wither the recieved string is an object or an array
    if (token is JArray)
    {
         var results = token.ToObject<List<JsonResult>>();
         dataGridView1b.DataSource = results;
    }
    else if (token is JObject)
    {
        var result = token.ToObject<JsonResult>();
        var results = new List<JsonResult>();
        results.Add(result);
        dataGridView1b.DataSource = results;
    }        
    
    var jobj=JsonConvert.DeserializeObject(responseString);
    var jsString=jobj[“return”].ToString()//在这里,您必须确保正确指定了密钥名称。
    var token=JToken.Parse(jsString);
    //现在确定接收的字符串是对象还是数组
    if(标记为JArray)
    {
    var results=token.ToObject();
    dataGridView1b.DataSource=结果;
    }
    else if(标记为JObject)
    {
    var result=token.ToObject();
    var results=新列表();
    结果。添加(结果);
    dataGridView1b.DataSource=结果;
    }        
    
    看看@Viksool-可能这是因为我缺乏技能,但我不知道如何将其用于解决我的问题。根据
    Newtonsoft
    的错误输出,您正在尝试将
    对象
    反序列化为
    数组
    ,而根据输入源,这是不可能的。因此,我给你的链接将帮助你识别
    responseString
    类型,如果它不是一个数组,你可以将它反序列化为一个对象,然后将它传递到一个新的
    list
    列表中:
    var result=JsonConvert.DeserializeObject(responseString)然后
    var resultList=(新列表()).Add(结果)
    然后使用
    resultList
    作为数据源。@Viksool-我正在尝试,但在下面有一条红色的曲线:
    var resultList=(新列表())。添加(结果)查看@Viksool-可能这是因为我缺乏技能,但我不知道如何将其用于解决我的问题。根据
    Newtonsoft
    的错误输出,您正在尝试将
    对象
    反序列化为
    数组
    ,而根据输入源,这是不可能的。因此,我给你的链接将帮助你识别
    responseString
    类型,如果它不是一个数组,你可以将它反序列化为一个对象,然后将它传递到一个新的
    list
    列表中:
    var result=JsonConvert.DeserializeObject(responseString)然后
    var resultList=(新列表()).Add(结果)
    然后使用
    resultList
    作为数据源。@Viksool-我正在尝试,但在下面有一条红色的曲线:
    var resultList=(新列表())。添加(结果)它工作!我非常感谢你的帮助!非常感谢你!它起作用了!我非常感谢你的帮助!非常感谢你!