您提到使用json2.js来对数据进行字符串化,但是POSTed数据似乎是URLEnpred
JSON您可能已经看过了,但是这篇关于无效JSON原语的文章介绍了为什么对JSON进行URLEnpred。
我建议 不要 将原始的,手动序列化的JSON字符串传递到您的method中。ASP.NET将自动对请求的POST数据进行JSON反序列化,因此,如果要手动序列化JSON字符串并将其发送到ASP.NET,则实际上最终将不得不对JSON序列化的JSON序列化。
我会根据以下建议提出更多建议:
var markers = [{ "position": "128.3657142857143", "markerPosition": "7" }, { "position": "235.1944023323615", "markerPosition": "19" }, { "position": "42.5978231292517", "markerPosition": "-3" }];$.ajax({ type: "POST", url: "/webservices/PodcastService.asmx/CreateMarkers", // The key needs to match your method's input parameter (case-sensitive). data: JSON.stringify({ Markers: markers }), contentType: "application/json; charset=utf-8", dataType: "json", success: function(data){alert(data);}, failure: function(errMsg) { alert(errMsg); }});避免无效JSON原语问题的关键是向jQuery传递
data参数的JSON字符串(而不是Javascript对象),以使jQuery不会尝试对数据进行URL编码。
在服务器端,将方法的输入参数与要传递的数据的形状匹配:
public class Marker{ public decimal position { get; set; } public int markerPosition { get; set; }}[WebMethod]public string CreateMarkers(List<Marker> Markers){ return "Received " + Markers.Count + " markers.";}Marker[] Markers如果愿意,还可以接受一个数组,例如。ASMX
scriptServices使用的反序列化器(JavascriptSerializer)非常灵活,它将尽其所能将输入数据转换为您指定的服务器端类型。



