从动态 JSON C# ASP.NET 填充谷歌地图



我有以下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
   }
 ]
}

我正在尝试将车站名称,经度和纬度固定到谷歌地图上。我收到错误,但没有描述错误的位置。这是后端 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;
    }
}

谢谢!

可能会爆炸的一件事是,通过将代码放在foreach循环的主体中,您正在多次创建列。在处理来自 API 的结果之前,只应添加一次这些内容。

你在哪里将它们添加到谷歌地图?在处理 Web 方法结果的 JavaScript 中?如果是这样,那么不,将它们添加到数据表是一个不必要的中间步骤。只需使用一个 foreach 循环将 DepartTimes 中的数据直接分配给 MAP 对象并返回这些对象的列表。

这样的东西呢?

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

最新更新