C# JSON解析问题 WebClient=newWebClient(); Stream=client.OpenRead(“某些链接”); StreamReader=新的StreamReader(流); Newtonsoft.Json.Linq.JObject JObject=Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine()); 列表=新列表(); //装货清单 对于(int i=0;i

C# JSON解析问题 WebClient=newWebClient(); Stream=client.OpenRead(“某些链接”); StreamReader=新的StreamReader(流); Newtonsoft.Json.Linq.JObject JObject=Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine()); 列表=新列表(); //装货清单 对于(int i=0;i,c#,json,parsing,C#,Json,Parsing,这段代码正在运行,但在json数据中,我有20多个结果应该返回,但我只得到8个 原因可能是什么?您正在计算字符串的长度。在某一点上,该字符串的长度等于或小于i(如果您尝试迭代8次,则为该字符串的第9个值) 这就是这段代码 WebClient client = new WebClient(); Stream stream = client.OpenRead(" some link "); StreamReader reader = new StreamReader(stream); Newton

这段代码正在运行,但在json数据中,我有20多个结果应该返回,但我只得到8个


原因可能是什么?

您正在计算字符串的长度。在某一点上,该字符串的长度等于或小于i(如果您尝试迭代8次,则为该字符串的第9个值)

这就是这段代码

WebClient client = new WebClient();
Stream stream = client.OpenRead(" some link ");
StreamReader reader = new StreamReader(stream);

Newtonsoft.Json.Linq.JObject jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());
List<String> list = new List<string>();


//loading list
for (int i = 0; i < ((string)jObject["some_stream"][i]["some_channel"]["some_name"]).Count(); i++)
{

  string result = ((string)jObject["some_streams"][i]["some_channel"]["some_name"]);
  list.Insert(i, result);

}

stream.Close();
返回位置
i
处字符串的长度,因此,如果您尝试迭代8次,那么在循环结束时,jObject[“some_stream”][9][“some_channel”][“some_name”]处的字符串的长度不超过9

从用法来看,它看起来像是
jObject[“Some_stream”]
返回一个数组。在这种情况下,您可以执行以下操作:

((string)jObject["some_stream"][i]["some_channel"]["some_name"]).Count()
您需要用jObject[“Some_stream”]的实际类型替换TReal

旁白:当您打开一个流时,最好在using语句中这样做。在代码中,如果出现异常,流不会关闭 代码将是

var arr = (Treal[])jObject["Some_stream"];
var list = (from obj in arr
           select ((string)obj["some_channel"]["some_name"])).ToList();

如果看不到数据,很难帮上忙。。。但是你应该考虑使用<代码>前缀循环,或者使用LINQ创建列表。你可以发布你的响应数据吗?这看起来是真的,但我怎样才能得到我的结果的数量呢?你是说总数吗?还是参赛人数?或者别的什么?很多thant's。据我所知,我需要在jobject?hm.中将TReal类型替换为实际数据类型。。最后一个变体有效。。新代码在做什么?/将来可能会出现一些异常??因为我是编程新手,在这方面看不到任何区别和优势。如果你能解释我)谢谢s@tekhitaFanta对于较小的数据量来说,差别不大,但在通信方式上更为精确。后者说:“我知道这个对象是一个类型为TReal的数组”,正如前者所说,“我知道这是一个类型为TReal的对象序列”,对于大型数据集,后者(可能)会明显更快,因为它对每个元素进行一次转换,而不是(可能)一次转换
WebClient client = new WebClient();  
using(var stream = client.OpenRead(" some link ")) {
    reader = new StreamReader(stream);   
    var jObject = Newtonsoft.Json.Linq.JObject.Parse(reader.ReadLine());  
    var arr = (Treal[])jObject["Some_stream"];
    var list = (from obj in arr
               select ((string)obj["some_channel"]["some_name"])).ToList();
}