0
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();

このコードは機能していますが、jsonデータでは20以上の結果が返されるはずですが、8つしか得られません。

原因は何でしょうか?

4

1 に答える 1

1

文字列の長さを数えています。ある時点で、その文字列の長さが i (8 回繰り返した場合の文字列の 9 番目の値) 以下です。

それがこのコードです

((string)jObject["some_stream"][i]["some_channel"]["some_name"]).Count()

location の文字列の長さを返すiので、8 回繰り返した場合、jObject["some_stream"][9]["some_channel"]["some_name"] の文字列の長さは 9 以下になります。ループ終了

使用法から、配列を返すように見えjObject["Some_stream"]ます。その場合、できることは次のようなものです。

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

TReal を実際のタイプの jObject["Some_stream"] に置き換える必要があります。

余談ですが、ストリームを開くときはいつでも、using ステートメント内でこれを行うことをお勧めします。コードでは、例外が発生した場合、ストリームは閉じられず、コードは次のようになります

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();
}
于 2012-09-25T10:35:15.317 に答える