4

Google Maps Distance Matrix API を使用して、C# でポイント間の距離を計算したいと考えています。

次のコードを使用してリクエストを行います。

private void MapsAPICall()
    {
        //Pass request to google api with orgin and destination details
        HttpWebRequest request =
            (HttpWebRequest)WebRequest.Create("http://maps.googleapis.com/maps/api/distancematrix/json?origins="
            + "51.123959,3.326682" + "&destinations=" + "51.158089,4.145267" 
            + "&mode=Car&language=us-en&sensor=false");

        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);
            }
        }
    }

そして、json の回答を Distance クラスに解析します。

public struct Distance
{
   // Here I want to parse the distance and duration
}

私が受け取る json 応答の例を次に示します

距離と期間を Distance クラスに解析するにはどうすればよいですか?
Jsonを使用するのはこれが初めてなので、経験がありません。

Ps: json.net ライブラリがインストールされています。

4

4 に答える 4

5

Web Essentialsには、「JSON をクラスとして貼り付ける」オプションがあります。これにより、JSON を逆シリアル化するために必要なクラスが生成されます。

このオプションを使用すると、次のものが生成されます。

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 Element
{
    public Distance distance { get; set; }
    public Duration duration { get; set; }
    public string status { get; set; }
}

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

public class Parent
{
    public string[] destination_addresses { get; set; }
    public string[] origin_addresses { get; set; }
    public Row[] rows { get; set; }
    public string status { get; set; }
}

(必要に応じて、生成されたコードをリファクタリングして読みやすくすることができます。シリアライゼーションがまだ機能していることを確認するには、Json.NET 属性を追加する必要があります)

次に、コード内で次の行を使用して、コードを逆シリアル化できます。

Parent result = JsonConvert.DeserializeObject<Parent>(json);
于 2012-12-04T13:10:08.853 に答える
0

遅くなりましたが、誰かに役立つかもしれません。JSON 文字列があり、それを正しく逆シリアル化するための適切なクラス構造が必要な場合は、オンライン ツールhttp://json2csharp.com/を使用できます。

JSON 文字列を貼り付けて、[生成] ボタンをクリックするだけです。必要なクラス構造を提供します。それはとても簡単です。このアプローチは、外部ツールのインストールを避けたい場合に役立ちます。

于 2017-06-22T12:39:32.433 に答える
-1

「距離」タイプは、JSON スキーマを正しくモデル化する必要があります。

public string[] destination_addresses { get; set; }
public string[] origin_addresses { get; set; }
public Row[] rows { get; set; }
public string status { get; set; }

(そしてもちろん、のようなサブタイプRowもモデル化する必要があります)

それ以外は、Json.Net の使用法:

Distance t = JsonConvert.DeserializeObject<Distance>(result);

大丈夫なはず

于 2012-12-04T13:09:55.450 に答える