У меня есть WebMethod со следующей подписью:
[WebMethod]
public void SaveRoute(int id, Coordinates[] coordinates)
{
}
Где координаты:
/// <summary>
/// A position on the globe
/// </summary>
public class Coordinates
{
public decimal Longitude { get; protected set; }
public decimal Latitude { get; protected set; }
public Coordinates(decimal latitude, decimal longitude)
{
this.Longitude = longitude;
this.Latitude = latitude;
}
}
Я хочу вызвать это из метода jQuery ajax, подобного этому:
$.ajax({
type: "POST",
url: "Routes.asmx/SaveRoute",
cache: false,
contentType: "application/json; charset=utf-8",
data: '{"id":1, ,"coordinates": "Longitude":123,"Latitude":456}',
dataType: "json",
success: handleHtml,
error: ajaxFailed
});
Что бы я мог предоставить в свойстве data для правильной десериализации?
Теперь я решил это:
Спасибо за помощь, мне в итоге удалосьполучить то, что я хотел, с помощью следующего кода:
var coords = new Array();
for (ckey in flightPlanCoordinates) {
var thisWaypoint = { "Longitude": flightPlanCoordinates[ckey].lng(), "Latitude": flightPlanCoordinates[ckey].lat() };
coords.push(thisWaypoint);
}
var data = { "id": 1, "coordinates": coords };
if (flightPlanCoordinates) {
$.ajax({
type: "POST",
url: "Routes.asmx/SaveRoute",
cache: false,
contentType: "application/json; charset=utf-8",
data: JSON.stringify(data),
dataType: "json",
success: handleHtml,
error: ajaxFailed
});
}
Я реверс-инжиниринг JSON, отправив некоторые с другим методом:
[WebMethod]
public Coordinates[] Get()
{
return new Coordinates[]
{
new Coordinates(123, 456),
new Coordinates(789, 741)
};
}
Также важно, чтобы у вас был публичный без параметровКонструктор в вашем классе и сеттеры вашей собственности общедоступны:
/// <summary>
/// A position on the globe
/// </summary>
public class Coordinates
{
public decimal Longitude { get; set; }
public decimal Latitude { get; set; }
public Coordinates()
{
}
public Coordinates(decimal latitude, decimal longitude)
{
this.Longitude = longitude;
this.Latitude = latitude;
}
}