2016-06-16 1 views
0

Première travailler avec JSON et connexes, je suis en train d'obtenir la distance/durée de toutes les voies possibles de cette demande: https://maps.googleapis.com/maps/api/directions/json?origin=41.2091585,-8.5763016&destination=41.258913,-8.636942&mode=driving&alternatives=true&avoid=tolls&language=pt-PT&key=AIzaSyDuhdvLAny3MpraXKX-bahkXZJolm7KLbEDeserialize Google Indications JSON

je suis arrivé les classes suivantes à l'aide « Coller JSON comme classes » et créer une classe pour chacun des suivants:

public class Rootobject 
    { 
     public Geocoded_Waypoints[] geocoded_waypoints { get; set; } 
     public Route[] routes { get; set; } 
     public string status { get; set; } 
    } 

public class Route 
    { 
     public Bounds bounds { get; set; } 
     public string copyrights { get; set; } 
     public Leg[] legs { get; set; } 
     public Overview_Polyline overview_polyline { get; set; } 
     public string summary { get; set; } 
     public object[] warnings { get; set; } 
     public object[] waypoint_order { get; set; } 
    } 

public class Leg 
    { 
     public Distance distance { get; set; } 
     public Duration duration { get; set; } 
     public string end_address { get; set; } 
     public End_Location end_location { get; set; } 
     public string start_address { get; set; } 
     public Start_Location start_location { get; set; } 
     public Step[] steps { get; set; } 
     public object[] traffic_speed_entry { get; set; } 
     public Via_Waypoint[] via_waypoint { 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; } 
} 

pour la requête mentionné ci-dessus, j'ai 3 itinéraires différents (aka « jambes ») et je veux obtenir la distance/durée de chacun.
Je suis venu avec ce qui suit, mais ça ne fonctionne pas.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(query); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
using (var streamReader = new StreamReader(response.GetResponseStream())) 
{ 
    var result = streamReader.ReadToEnd(); 

    if (!string.IsNullOrEmpty(result)) 
    { 
     Distance t = JsonConvert.DeserializeObject<Distance>(result); 
     string distance1_Value = t.value; 
     string distance1_Text = t.text; 

     Duration d = JsonConvert.DeserializeObject<Duration>(result); 
     string duration1_Value = d.value; 
     string duration1_Value = d.text; 
    } 
} 

Une aide? PS: Si quelqu'un peut me montrer comment itérer jeter chaque "jambes" qui serait génial.

EDIT: J'ai oublié de mentionner que j'utilise Newtonsoft.

+0

Vous avez oublié de décrire * ne fonctionne pas *. Votre ordinateur a-t-il explosé? –

+1

Mais vous devriez essayer de désérialiser le résultat à Rootobject. Il n'y a aucun moyen d'auto-cherrypick un objet json imbriqué quelque part dans le résultat –

+0

@SirRufo comment? EDIT: Ok, je vais commencer avec Rootobject, je pensais que je pouvais le faire de cette façon. Alors noob. – iamdlm

Répondre

1

J'ai trouvé la solution il y a quelques jours ...

D'abord, je fais la même chose de vous, mais ne fonctionne toujours pas pour moi, donc je prends un regard profond dans les classes généré automatiquement par cet outil et remarquez que certaines classes manquaient les 's' à la fin de leurs noms. Step, où le nom correct 'Steps' Leg. nom correct 'Jambes' Route. nom correct 'Routes'

Vous devez résoudre ce problème dans l'ensemble du document. Après cela, vous pouvez convertir directement ...

Jetez un oeil à la réponse correcte: [1]: http://pastie.org/10935748#9