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