2016-02-03 3 views
2

Я пытаюсь проанализировать Json в C#. (Я новичок в Json)Parsing JSON in C# return null value

WebRequest webRequest = WebRequest.Create(url); 
         var httpWebRequest = (HttpWebRequest)webRequest; 
         var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 

         String responseText = ""; 
         using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
         { 
          responseText = streamReader.ReadToEnd(); 
         } 

//

Это выход в responseText:

{ 
    "disclaimer": "Exchange rates provided for informational purposes only and do not constitute financial advice of any kind. Although every attempt is made to ensure quality, no guarantees are made of accuracy, validity, availability, or fitness for any purpose. All usage subject to acceptance of Terms: https://openexchangerates.org/terms/", 
    "license": "Data sourced from various providers; resale prohibited; no warranties given of any kind. All usage subject to License Agreement: https://openexchangerates.org/license/", 
    "timestamp": 1454497211, 
    "base": "EUR", 
    "rates": { 
    "INR": 74.42686146, 
    "USD": 1.0929332 
    } 
} 

Чтобы получить базу от Json

var obj = JObject.Parse(responseText); 
String bcur = (string)obj["base"]; 
Console.WriteLine("base :"bcur.ToString()); 


Output : base :EUR 

так же получить тарифы от INR, я написал

var obj = JObject.Parse(responseText); 
    String rte= (string)obj["INR"]; 
    Console.WriteLine("rate:"rte); 

it gives me null. 

Может кто-нибудь сказать мне, что не так в моем коде. или лучший способ получить базу и курс валюты.

+0

Из любопытства, почему вы используете '.ToString()', когда вы пишете, чтобы утешить, когда вы уже определили тип переменной, как строка? –

+0

мой плохой .. я сделал исправление .. спасибо для указание. – GameBuilder

+0

Обновленный код в моем ответе, чтобы отразить это тоже. Вам также не хватает символа конкатенации в строках вашей консоли. Между вашей строкой и переменной должна быть '+'. Или, альтернативно, если вы используете .Net 4.6, вы можете использовать материал интерполяции строк, префикс вашей строки с помощью $. Используя один из ваших примеров 'Console.WriteLine (« rate: »rte);' будет выглядеть как 'Console.WriteLine ($" rate: {rte} ");' –

ответ

2

INR не находится в базовом объекте, поэтому вы ищете недвижимость INR в том месте, где ее не существует. Вам нужно будет сделать это в два шага, чтобы получить доступ к собственности. Модифицирования код выше, это будет выглядеть примерно так:

var obj = JObject.Parse(responseText); 
JObject rates = (JObject)obj["rates"]; 
string rte = (string)rates["INR"]; 
Console.WriteLine("rate:" + rte); 
+1

После вашего ответа я понял, что есть и «ставки» JObject. Спасибо – GameBuilder

+1

Рад, что я мог бы помочь :) –