So I'm trying to get distance between two cities using Google Maps API. To see thier Json Format go here: https://developers.google.com/maps/documentation/directions/start
So My Class objects look like this to match
public class GeocodedWaypoint
{
public string geocoder_status { get; set; }
public string place_id { get; set; }
public List<string> types { get; set; }
public bool? partial_match { 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 Distance
{
public string text { get; set; }
public int value { get; set; }
}
public class Duration
{
public string text { get; set; }
public int value { get; set; }
}
public class EndLocation
{
public double lat { get; set; }
public double lng { get; set; }
}
public class StartLocation
{
public double lat { get; set; }
public double lng { get; set; }
}
public class Distance2
{
public string text { get; set; }
public int value { get; set; }
}
public class Duration2
{
public string text { get; set; }
public int value { get; set; }
}
public class EndLocation2
{
public double lat { get; set; }
public double lng { get; set; }
}
public class Polyline
{
public string points { get; set; }
}
public class StartLocation2
{
public double lat { get; set; }
public double lng { get; set; }
}
public class Step
{
public Distance2 distance { get; set; }
public Duration2 duration { get; set; }
public EndLocation2 end_location { get; set; }
public string html_instructions { get; set; }
public Polyline polyline { get; set; }
public StartLocation2 start_location { get; set; }
public string travel_mode { get; set; }
public string maneuver { get; set; }
}
public class Leg
{
public Distance distance { get; set; }
public Duration duration { get; set; }
public string end_address { get; set; }
public EndLocation end_location { get; set; }
public string start_address { get; set; }
public StartLocation start_location { get; set; }
public List<Step> steps { get; set; }
public List<object> traffic_speed_entry { get; set; }
public List<object> via_waypoint { get; set; }
}
public class OverviewPolyline
{
public string points { get; set; }
}
public class Route
{
public Bounds bounds { get; set; }
public string copyrights { get; set; }
public List<Leg> legs { get; set; }
public OverviewPolyline overview_polyline { get; set; }
public string summary { get; set; }
public List<object> warnings { get; set; }
public List<object> waypoint_order { get; set; }
}
public class RootObject
{
public List<GeocodedWaypoint> geocoded_waypoints { get; set; }
public List<Route> routes { get; set; }
public string status { get; set; }
}
and I am wanting to get the leg object with this
static async Task<Leg> GetLegAsync(string path)
{
Leg leg = null;
HttpResponseMessage response = await client.GetAsync(path);
if (response.IsSuccessStatusCode)
{
var json = await response.Content.ReadAsStringAsync();
leg = JsonConvert.DeserializeObject<Leg>(json);
}
return leg;
}
The problem is that when I am accessing the leg object through this it isn't deserialzing properly. Sorry if it's stupid simple but I haven't really messed with HTTP clients and stuff like this. I'm pretty good with C# but I haven't really studied much past just functionality and went into some of this.
EDIT: If this is helpful
static async Task RunAsync(string pos1,string pos2)
{
string apiKey = "MUST_KEEP_HIDDEN!";
client.BaseAddress = new Uri("https://maps.googleapis.com/maps/api/directions/json?origin="+pos1+"&destination="+pos2+"&key=" + apiKey);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//Console.ReadLine();
Leg leg = await GetLegAsync("https://maps.googleapis.com/maps/api/directions/json?origin=" + pos1 + "&destination=" + pos2 + "4&key=" + apiKey);
showinfo(leg);
}
thanks in advance
jsonobject?jsonobject, you have a class calledRootObjectwhich I'm betting is the main object you should deserialize to. I bet you even used json2csharp.com to make this.LegsoJsonConvert.DeserializeObject<Leg>(json)is not going to work. It looks like yourRootObjectmatches the response. Also, the JSON being returned is snake case, I'm not positive but I am pretty sure that neither Newtonsoft.JSON nor Microsoft's JSON deserializer (can't remember the class offhand) will map snake case to Pascal case by default.RootObject. The problem with using json2csharp is that sometimes it creates the wrong datatype for primitives. To some applications, the difference between decimal and double can cause you major problems. Sometimes you need to override the name of the property as json2csharp can't translate it into a class property. You can use[JsonProperty(PropertyName = "FooBar")]to fix this if it ever happens.