json.net (Newtonsoft) ライブラリを使用して、API json 応答を解析しています。ID 値とランク値だけが必要です。json は次のようになります。
{"items":
[
{"fields":
{"entry":
[
{"key":"Customer","value":"ABC Electronics"},
{"key":"Status","value":"Untouched"},
{"key":"Amount","value":"$1000"},
{"key":"rank","value":"3.0"}
]
},
"id":"1001",
"owner":"dave@sales123.com"
},
{"fields":
{"entry":
[
{"key":"Customer","value":"General Products"},
{"key":"Status","value":"Developing"},
{"key":"Amount","value":"$6000"},
{"key":"rank","value":"6.0"}
]
},
"id":"1002",
"owner":"john@sales123.com"
}
]
}
クラス内に、リクエストを作成し、json をループして ID とランクを取得し、それらの値を新しい RankScore オブジェクトとして List クラス メンバーに追加するメソッドがあります。私の質問は、単にループして各キーをチェックするよりも、エントリ配列でキー == 「ランク」の「値」を見つけるためのより良い方法があるかどうかです。私が見つけられなかったLINQの方法はありますか?
public void MakeRequest(apiURL) {
var requestUrl = new Uri(apiUrl, "/ranks/0");
HttpWebRequest request = WebRequest.Create(requestUrl) as HttpWebRequest;
request.Credentials = new NetworkCredential(this.Username, this.Password);
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (var reader = new StreamReader(response.GetResponseStream()))
{
var token = JObject.Parse(reader.ReadToEnd());
var items = token["items"];
foreach (var item in items)
{
var id = item.Value<string>("id");
var entries = item["fields"]["entry"];
string rank = null;
// **** Is there a better way to do this? ****
foreach (var entry in entries)
{
if (entry.Value<string>("key") == "rank")
{
rank = entry.Value<string>("value");
break;
}
}
var ranking = new RankScore(int.Parse(id), rank);
this.Ranks.Add(ranking);
}
}
}
}