将JSON数据发送到ASP.NET WebMethod的jquery问题

问题描述

| 我已经阅读了有关此问题的所有问题,但未能解决... 分数类:
public class score
{
    // default constructor
    public score()
    { }

    public int TraitID { get; set; }

    public double Traitscore { get; set; }
}
ASPX WebMethod:
    [WebMethod]
    public static bool Test(List<score> scores)
    {
        return true;
    }
jQuery代码
            var scoresList = [{\"TraitID\":1,\"Traitscore\":2},{\"TraitID\":2,\"Traitscore\":5}];

            $.ajax({
                type: \"POST\",url: \"Tryouts.aspx/Test\",data: \"{\'scores\':\" + JSON.stringify(scoresList) + \"}\",contentType: \"application/json; charset=utf-8\",dataType: \"json\",success: function (response) {
                    if (response.d == true) {
                        alert(\"success!!!!!\");
                    }
                    else {
                        alert(\"problem!!!!!!!!!\");
                    }
                },error: function () {
                    alert(\"ERROR\");  
                }
            });
我不断收到错误
{\"Message\":\"Cannot convert object of type \\u0027System.String\\u0027 to type
\\u0027System.Collections.Generic.List`1[BusinessLogicLayer.score]\\u0027\",\"StackTrace\":\"   at
System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object& convertedobject)\\r\\n   at
System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o,Object& convertedobject)\\r\\n   at
System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams)\\r\\n
at System.Web.Script.Services.WebServiceMethodData.CallMethodFromrawParams(Object target,IDictionary`2 parameters)\\r\\n   at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext
context,WebServiceMethodData methodData,IDictionary`2 rawParams)\\r\\n   at
System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)\",\"ExceptionType\":\"system.invalidOperationException\"}
谢谢 !!!     

解决方法

我正在通过Web方法将自定义对象的数组传递到List中,并且效果很好。 我猜是由于属性名称周围的引号,您遇到了一个小的JSON格式问题。尝试将您的对象更改为此:
var scoresList = [{TraitID:1,TraitScore:2},{TraitID:2,TraitScore:5}];
并将您的数据行更改为:
data: JSON.stringify({ scores : scoresList }),
希望有帮助... 更新:工作示例...
<script type=\"text/javascript\">
$(function () {

    var scoresList = [{ TraitID: 1,TraitScore: 2 },{ TraitID: 2,TraitScore: 5}];

    $.ajax({ type: \"POST\",url: \"Tryouts.aspx/Test\",data: JSON.stringify({ scores: scoresList }),contentType: \"application/json; charset=utf-8\",dataType: \"json\",success: function (response) {
            if (response.d == true) {
                alert(\"success!!!!!\");
            } else {
                alert(\"problem!!!!!!!!!\");
            }
        },error: function (xhr) {
            alert(\"ERROR\");
        }
    });

});
</script>
这是背后的代码:
public class Score
{    // default constructor    
    public Score() { }
    public int TraitID { get; set; }
    public double TraitScore { get; set; }
}

[WebMethod]
public static bool Test( List<Score> scores )
{
    return true;
}