[英]Complicated deserialization json with nested classes c#
我已经使用json2csharp生成了类。 var content = response.Content;
一切都很好 我还反序列化了主类:
var responseData1 = JsonConvert.DeserializeObject<RootObjectChangeLocation>(content);
但是我需要从此类中检索lat和lng:
public class Location
{
public double lat { get; set; }
public double lng { get; set; }
}
我试图使var responseData1 = JsonConvert.DeserializeObject<Location>(content);
检索坐标。 但是,如果我直接这样做,则responseData1
中的lat
和lng
为空。 我怎样才能得到它们? 这是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"
}
@dbc帮助我根据此链接找到解决方案
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());
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.