2016-08-09 2 views
0

Я использую Google API геокода, я могу получить строку JSON со всеми датами, но когда я буду преобразовывать ее в объект, это не работа, он что-то возвращает, я использую JSON.NET, я делаю что-то неправильно?Deserialize JSON string (google) geocode API для объекта с использованием JSON.NET C#

во всех данных JSON, я хочу просто взять formatted_address. Запрос

JSON: http://maps.googleapis.com/maps/api/geocode/json?address=av.paulista&sensor=false%22

извините мой плохой английский

моя главная форма: получение данных в формате JSON (рабочий)

private void btnConsumir_Click(object sender, EventArgs e) 
    { 
     string address = txtAddress.Text ; 

     string searchCode = "http://maps.googleapis.com/maps/api/geocode/json?address=" + address + "&sensor=false"; 
     var JSONdata = ""; 


     var httpWebRequest = (HttpWebRequest)WebRequest.Create(searchCode); 
     httpWebRequest.ContentType = "text/json"; 
     httpWebRequest.Method = "POST"; 


     var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()); 

     var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); 

     using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      JSONdata = streamReader.ReadToEnd(); 
     } 

     lblJSON.Text = JSONdata;//its a label 

здесь я хочу получить formatted_address информацию о формате JSON:

[...] 
using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      JSONdata = streamReader.ReadToEnd(); 
     } 

     lblJSON.Text = JSONdata;//its a label 

     AddressObject addressObject = JsonConvert.DeserializeObject<addressObject>(JSONdata); 
     string result = addressObject.formatted_address; 

     lblJSON.Text = result; 

и это мой объект класса:

class AddressObject 
    { 
     public string formatted_address { get; set; } 




    } 

большое вам спасибо!

ответ

1

Результаты, которые возвращаются из api, намного больше, чем formatted_address. Вам нужно десериализовать весь график, а затем вырвать то, что вы хотите.

С классовой структуры ниже, вы можете сделать это:

Rootobject mapdata = JsonConvert.DeserializeObject<Rootobject>(JSONdata); 

...

public class Rootobject 
{ 
    public Result[] results { get; set; } 
    public string status { get; set; } 
} 

public class Result 
{ 
    public Address_Components[] address_components { get; set; } 
    public string formatted_address { get; set; } 
    public Geometry geometry { get; set; } 
    public string place_id { get; set; } 
    public string[] types { get; set; } 
} 

public class Geometry 
{ 
    public Location location { get; set; } 
    public string location_type { get; set; } 
    public Viewport viewport { get; set; } 
} 

public class Location 
{ 
    public float lat { get; set; } 
    public float lng { get; set; } 
} 

public class Viewport 
{ 
    public Northeast northeast { get; set; } 
    public Southwest southwest { get; set; } 
} 

public class Northeast 
{ 
    public float lat { get; set; } 
    public float lng { get; set; } 
} 

public class Southwest 
{ 
    public float lat { get; set; } 
    public float lng { get; set; } 
} 

public class Address_Components 
{ 
    public string long_name { get; set; } 
    public string short_name { get; set; } 
    public string[] types { get; set; } 
} 
+0

большое спасибо так много! –