2017-06-16 58 views
0

我已经使用json2csharp生成类。 有都好于var content = response.Content; 我也反序列化的主类:复杂的反序列化json与嵌套类c#

var responseData1 = JsonConvert.DeserializeObject<RootObjectChangeLocation>(content); 

但我需要检索纬度和经度从这个类:

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

我试图让var responseData1 = JsonConvert.DeserializeObject<Location>(content);检索坐标。但是,如果我直接执行,则latlngresponseData1中为空。我怎样才能得到它们? 这是由json2csharp生成的代码:

public class AddressComponent 
    { 
     public string long_name { get; set; } 
     public string short_name { get; set; } 
     public List<string> types { get; set; } 
    } 

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

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

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

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

    public class Northeast2 
    { 
     public double lat { get; set; } 
     public double lng { get; set; } 
    } 

    public class Southwest2 
    { 
     public double lat { get; set; } 
     public double lng { get; set; } 
    } 

    public class Viewport 
    { 
     public Northeast2 northeast { get; set; } 
     public Southwest2 southwest { get; set; } 
    } 

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

    public class Result 
    { 
     public List<AddressComponent> address_components { get; set; } 
     public string formatted_address { get; set; } 
     public Geometry geometry { get; set; } 
     public string place_id { get; set; } 
     public List<string> types { get; set; } 
    } 

    public class RootObjectChangeLocation 
    { 
     public List<Result> results { get; set; } 
     public string status { get; set; } 
    } 

的jsonString是:

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "Vinnytsia", 
       "short_name" : "Vinnytsia", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Vinnyts'ka city council", 
       "short_name" : "Vinnyts'ka city council", 
       "types" : [ "administrative_area_level_3", "political" ] 
      }, 
      { 
       "long_name" : "Vinnyts'ka oblast", 
       "short_name" : "Vinnyts'ka oblast", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "Ukraine", 
       "short_name" : "UA", 
       "types" : [ "country", "political" ] 
      } 
     ], 
     "formatted_address" : "Vinnytsia, Vinnyts'ka oblast, Ukraine", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 49.27902, 
        "lng" : 28.5710879 
       }, 
       "southwest" : { 
        "lat" : 49.190448, 
        "lng" : 28.3681799 
       } 
      }, 
      "location" : { 
       "lat" : 49.233083, 
       "lng" : 28.468217 
      }, 
      "location_type" : "APPROXIMATE", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 49.27902, 
        "lng" : 28.5710879 
       }, 
       "southwest" : { 
        "lat" : 49.1906116, 
        "lng" : 28.3681799 
       } 
      } 
     }, 
     "place_id" : "ChIJiWRaGWVbLUcR_nTd7lnh1Ms", 
     "types" : [ "locality", "political" ] 
     } 
    ], 
    "status" : "OK" 
} 
+0

因此,要找到解决方案......是什么问题? –

+1

*我需要添加更多的细节来发布这个问题... * - 然后请在提问之前这样做。你在找这个吗? [Google地理编码Json解析C#中的问题](https://stackoverflow.com/q/283​​71365/3744182)。 – dbc

+1

请分享您尝试解码的JSON。 – dbc

回答

0

@dbc帮我根据这个link

 get_coordinates.Click += delegate 
     { 
      string city_val = change_location.Text; 
      var client = new RestClient("https://maps.googleapis.com/maps/api/geocode/json?address="); 
      var request = new RestRequest(city_val, Method.GET); 
      IRestResponse response = client.Execute(request); 
      var content = response.Content; 

      var responseData1 = JsonConvert.DeserializeObject<RootObjectChangeLocation>(content); 

      if (content == null||content=="") 
      { 
       Toast.MakeText(this, "City is empty or incorrect", ToastLength.Short).Show(); 
      } 
      else 
      { 
       foreach(var data in responseData1.results) 
       { 
        var lat = data.geometry.location.lat; 
       } 
      } 
      // Toast.MakeText(this, content, ToastLength.Long).Show(); 
      Console.WriteLine(content.ToString()); 
     };