2017-01-01 4 views
1

Iは、以下のJSONを有する:移入グーグルマップ

{ 
"request_time": "2017-01-01T20:21:26+00:00", 
"stations": [ 
{ 
    "station_code": "MAT", 
    "atcocode": null, 
    "tiploc_code": "MATLOCK", 
    "name": "Matlock", 
    "mode": "train", 
    "longitude": -1.558911, 
    "latitude": 53.138406, 
    "distance": 221 
}, 
{ 
    "station_code": "MTB", 
    "atcocode": null, 
    "tiploc_code": "MATLCKB", 
    "name": "Matlock Bath", 
    "mode": "train", 
    "longitude": -1.556759, 
    "latitude": 53.122353, 
    "distance": 1784 
    } 
] 
} 

Iは、Googleマップに局名、経度と緯度を固定しようとしています。私はエラーが発生していますが、どこにエラーがあるのか​​説明はありません。これはバックエンドのC#コードです。

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!ClientScript.IsStartupScriptRegistered("window")) 
     { 
      Page.ClientScript.RegisterStartupScript(this.GetType(), "window", "CreateMarker();", true); 
     } 

    } 

    [WebMethod] 
    public MAPS[] BindMapMarker() 
    { 

     DataTable dt = new DataTable(); 
     DataRow dr; 
     List<MAPS> lstMarkers = new List<MAPS>(); 
     try 
     { 

      string json = get_web_content("https://transportapi.com/v3/uk/train/stations/near.json?app_id=03bf8009&app_key=d9307fd91b0247c607e098d5effedc97&lat=53.13838&lon=-1.5556&rpp=3"); 

      dynamic array = JsonConvert.DeserializeObject(json); 
      dynamic DepartTimes = array.stations; 

      foreach (var item in DepartTimes) 
      { 
       //dt.Columns.Add("LocationName"); 
       dt.Columns.Add("Location"); 
       dt.Columns.Add("Latitude"); 
       dt.Columns.Add("Longitude"); 

       dr = dt.NewRow(); 
       dr["Location"] = item["name"]; 
       dr["Latitude"] = item["latitude"]; 
       dr["Longitude"] = item["longitude"]; 


       dt.Rows.Add(dr); 

      } 



      foreach (DataRow dtrow in dt.Rows) 
      { 
       MAPS objMAPS = new MAPS(); 
       objMAPS.LocationName = dtrow[0].ToString(); 
       objMAPS.Latitude = dtrow[0].ToString(); 
       objMAPS.Longitude = dtrow[1].ToString(); 
       lstMarkers.Add(objMAPS); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 


     return lstMarkers.ToArray(); 
    } 



    public class MAPS 
    { 
     public string LocationName; 
     public string Latitude; 
     public string Longitude; 
    } 

    public string get_web_content(string url) 
    { 
     Uri uri = new Uri(url); 
     HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri); 
     request.Method = WebRequestMethods.Http.Get; 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     StreamReader reader = new StreamReader(response.GetResponseStream()); 
     string output = reader.ReadToEnd(); 
     response.Close(); 

     return output; 
    } 

} 

ありがとう!

+1

爆発するかもしれない1つのことは、foreachループの本体にそのコードを挿入して複数回列を作成することです。 APIからの結果を処理する前にこれらを一度追加してください。しかし、なぜそれらをDataTableに入れて、そのすぐ下のオブジェクトのコレクションにそれらを転送するのですか? – bpechkis

+0

DataTableにJSONデータを追加する必要はありませんか?Googleマップにデータの各行を追加するには、それらをデータテーブルに入れていますか? – kieron

+1

Googleマップにどこに追加していますか? Webメソッドの結果を処理するJavaScriptでは、そうであれば、いいえ、それらをDataTableに追加することは、不要な中間ステップです。 foreachループを使って 'DepartTimes'のデータを' MAP'オブジェクトに直接代入し、それらのリストを返してください。 – bpechkis

答えて

1

1つのことは、foreachループの本体にそのコードを挿入して複数回列を作成することです。 APIからの結果を処理する前にこれらを一度追加してください。

ここでGoogleマップに追加していますか? Webメソッドの結果を処理するJavaScriptでは、そうであれば、いいえ、それらをDataTableに追加することは、不要な中間ステップです。 1つのforeachループを使用して、DepartTimesのデータをMAPオブジェクトに直接割り当て、それらのリストを返します。

0

このようなものは?

foreach (var item in DepartTimes) 
      { 
       MAPS objMAPS = new MAPS(); 
       objMAPS.LocationName = item["name"].ToString(); 
       objMAPS.Latitude = item["latitude"].ToString(); 
       objMAPS.Longitude = item["longitude"].ToString(); 
       lstMarkers.Add(objMAPS); 
      } 
+0

うん、それは私が考えていたものです。 – bpechkis

関連する問題