2016-06-16 22 views
0

天気APIを呼び出します。これはJson応答を返します。 私のC#コード -C#APIコールからのjson応答を読み取ることができません

  Uri uri1 = new Uri(APIUrl); 
      WebRequest webRequest1 = WebRequest.Create(uri1); 
      WebResponse response1 = webRequest1.GetResponse(); 
      StreamReader streamReader1 = new StreamReader(response1.GetResponseStream()); 
      String responseData1 = streamReader1.ReadToEnd().ToString(); 
      dynamic data1 = JObject.Parse(responseData1) 

解析を呼び出し中に型「Newtonsoft.Json.JsonReaderException」の未処理の例外がNewtonsoft.Json.dll

で発生しました追加情報 below-ように私は例外を取得します。エラーの読み取りをJsonReaderのJObject現在のJsonReaderアイテムはオブジェクトではありません:StartArray。私はhttp://jsonlint.com/でこのJSONをチェックすると、パス ''、行1、位置1

マイ解析 - responseData1は

responseData1="[{\"locationName\":\"Bangalore\",\"subLocationName\":null,\"gid\":\"43295\",\"subStateID\":null,\"subStateName\":null,\"stateID\":\"II\",\"stateName\":\"Indien\",\"latitude\":12.9667,\"longitude\":77.5833,\"altitude\":900,\"zip\":null}\n, {\"match\":\"yes\"}]" 

れたままJSON文字列を持っている - それは有効なJSONを言います。私はブラウザ内ブラウザ - 安息に直接私のAPIUrlをヒットした場合

がある

[{"locationName":"Bangalore","subLocationName":null,"gid":"43295","subStateID":null,"subStateName":null,"stateID":"II","stateName":"Indien","latitude":12.9667,"longitude":77.5833,"altitude":900,"zip":null}, {"match":"yes"}] 

私の目的は、上記のJSONから「GID」プロパティの値を読み取ることでbelow-として。 誰かが私を助けることができますか? ありがとう!

http://www.newtonsoft.com/json/help/html/ParseJsonArray.htm

+0

こんにちは@ DanielGimenez、私はスニペットを修正しました。あなたは今確認してください。 – Saurabh

答えて

4

は配列でありますこのためのモデルを作成する方がよいでしょう。次に、Newtonsoftに、動的型を使用する代わりにJSON文字列を逆シリアル化するように伝えることができます。

まず、あなたがこのようなモデルを作成する必要があります:

public class WeatherData 
{ 
    public string locationName { get; set; } 
    public string subLocationName { get; set; } 
    public string gid { get; set; } 
    public int subStateID { get; set; } 
    public string subStateName { get; set; } 
    public string stateID { get; set; } 
    public string stateName { get; set; } 
    public double latitude { get; set; } 
    public double longitude { get; set; } 
    public int altitude { get; set; } 
    public string zip { get; set; } 
    public string match { get; set; } 
} 

そして、次のようにリターンJSONをデシリアライズ:

var data1 = JsonConvert.DeserializeObject<WeatherData>(responseData1); 

または配列のために:

var data1 = JsonConvert.DeserializeObject<List<WeatherData>>(responseData1); 
1

それは次のようになりますないオブジェクト - JSONはあなたが解析しようとしているので、あなたが、JArrayクラスを使用する必要があるときは、jオブジェクトクラスを使用している

関連する問題