2017-01-11 6 views
0

気象APIからデータを取得していますが、特定のデータのみを返したいと思います。C#と天気API特定のデータを取得します

ここ
public Object getWeatherForcast() 
    { 
     string url = "http://api.openweathermap.org/data/2.5/weather?q=Aalborg&APPID=appid&units=imerial"; 

     var client = new WebClient(); 
     var content = client.DownloadString(url); 
     var serializer = new JavaScriptSerializer(); 
     var jsonContent = serializer.Deserialize<Object>(content); 

     //here if I use only jsonContent it returns all data, unfortunately I don t know how to get 
     //the specific data 
     return jsonContent.main.humidity; 


    } 

私はjsonContentを使用する場合には、残念ながら私はtは 特定のデータ

enter image description here

enter image description here

+0

:あなたにもdynamicを使用して、JSONをデシリアライズするNewtonsoft.Jsonライブラリを使用する場合は、プロパティを使用してデータにアクセスするには、次、クリーナーのサンプルのようなものを得ることができます湿度クイックで汚れたトリック、私は他の答えが良くなると確信しています。 – RandomStranger

+0

APIから取得したJSON文字列も投稿できますか? – Mahdi

+0

@Mahdiこれはあなたが必要としているものですか?私はその記事を編集した。 –

答えて

0

代わりの型にデシリアライズを取得する方法を知っているドン、すべてのデータを返します。 Objectのように、天気予報などの独自のオブジェクトタイプに逆シリアル化することをお勧めします。このようにすることができます:

WeatherReport report = serializer.Deserialize<WeatherReport>(content); 

これは非常に簡単です。とにかく

、あなたはすぐそこに持っているもの、あなたがこのような何かを行うことができます与えられた。

jsonContent.main[2].ToString(); //Or whatever other method or property you prefer 
+0

同じ問題、オブジェクトには "main"の定義が含まれていません... "ToString()"は役に立ちません... –

+0

try jsonContent [3] [2] .ToString(); – NicoRiff

+0

'var client = new WebClient(); var content = client.DownloadString(url); var serializer =新しいJavaScriptSerializer(); var jsonContent = serializer.Deserialize (content); return jsonContent [3] [2] .ToString(); ' あなたが提案したコードは次のようになりますか?メッセージは "タイプ[オブジェクト]"の表現に[]でインデックス付けを適用できません –

0

あなたがJSONから読みたいデータを表すクラス(複数可)を準備する方が良いだろう、など

var jsonContent = serializer.Deserialize<dynamic>(content); 
var humidity = jsonContent["main"]["humidity"]; 

EDIT

:すでに述べたように、しかし、あなたはあなたの方法、それを維持したい場合、または単に単一の値を読んで(「メイン」セクションから例えば湿度)は、次の小さなコードスニペットで dynamicを使用することができます

あなたのケースでは、JavaScriptSerializerはオブジェクトをDictionary<string, object>に非直列化するため、上記のようにインデクサーでそのプロパティにアクセスする必要があります。あなたはLINQのようなものを使用してのみ選択することができ、それを返す前に

var jsonContent = JsonConvert.DeserializeObject<dynamic>(content); 
humidity = jsonContent.main.humidity;