2011-06-19 16 views
1

http://www.giantflyingsaucer.com/blog/?p=2227&cpage=1は、ASP.NET MVCとGoogle API統合の優れたアプローチを提供します。 URL短縮サービスの場合Google Distance Matrix APIでJSON出力を解析する方法は?

、応答構造はシンプルで、

プライベートクラスGoogleShortenedURLResponse {取得 { パブリック文字列ID;セット; } 公開ストリングkind {get;セット; } 公開ストリングlongUrl {get;セット; } }

私はGoogle Distance Matrix APIで同じ手法を使用しました...しかし、レスポンス構造を定義する方法はわかりません...ご存知ですか?

答えて

6

次は、法案に合う必要があります。

using System; 
using System.Net; 
using System.Text; 
using System.Web; 
using System.Web.Script.Serialization; 

public class DistanceResponse 
{ 
    public string Status { get; set; } 
    public string[] Origin_Addresses { get; set; } 
    public string[] Destination_Addresses { get; set; } 
    public Row[] Rows { get; set; } 
} 

public class Row 
{ 
    public Element[] Elements { get; set; } 
} 

public class Element 
{ 
    public string Status { get; set; } 
    public Item Duration { get; set; } 
    public Item Distance { get; set; } 
} 

public class Item 
{ 
    public int Value { get; set; } 
    public string Text { get; set; } 
} 

class Program 
{ 
    static void Main() 
    { 
     using (var client = new WebClient()) 
     { 
      var values = HttpUtility.ParseQueryString(string.Empty); 
      values["origins"] = "Vancouver BC|Seattle"; 
      values["destinations"] = "San Francisco|Victoria BC"; 
      values["mode"] = "bicycling"; 
      values["language"] = "fr-FR"; 
      values["sensor"] = "false"; 
      var uriBuilder = new UriBuilder("http://maps.googleapis.com/maps/api/distancematrix/json"); 
      uriBuilder.Query = values.ToString(); 
      var result = client.DownloadData(uriBuilder.ToString()); 
      var json = Encoding.UTF8.GetString(result); 

      var serializer = new JavaScriptSerializer(); 
      var distanceResponse = serializer.Deserialize<DistanceResponse>(json); 
      if (string.Equals("ok", distanceResponse.Status, StringComparison.OrdinalIgnoreCase)) 
      { 
       Console.WriteLine("origin addresses: {0}", string.Join(", ", distanceResponse.Origin_Addresses)); 
       Console.WriteLine("destination addresses: {0}", string.Join(", ", distanceResponse.Destination_Addresses)); 
       foreach (var row in distanceResponse.Rows) 
       { 
        foreach (var element in row.Elements) 
        { 
         if (string.Equals("ok", element.Status, StringComparison.OrdinalIgnoreCase)) 
         { 
          Console.WriteLine("Distance: {0} {1}", element.Distance.Text, element.Distance.Value); 
          Console.WriteLine("Duration: {0} {1}", element.Duration.Text, element.Duration.Value); 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

おかげでダーリンを...それは私のために動作します!!!! –

関連する問題