0

aspxページでjsonオブジェクトをWebMethodに渡したい

これが私のjqueryとWebMethodです

$("#button-login").bind({
        Click: accountRegister
    });



function accountRegister(e) {

    var dataObj = $("#login input[type]").serializeArray();
    var obj = JSON.stringify(dataObj);
    $.ajax({
        type: "POST",
        url: "Checkout.aspx/login",
        data: obj,
        contentType: "application/json; charset=UTF-8",
        dataType: "json",

        beforSend: function () {
            $(this).attr("disabled", "true");
            $(this).after(waitObj);
        },

        success: function (msg) {
            // Replace the div's content with the page method's return.
            alert("success");
            $("#checkout").slideUp("slow");
            $("#payment-address").slideDown("slow");
        },
        error: function (msg) {
         //alert(msg);
        },
        complete: function (jqxhr,status) {
            alert("Type:" + $.type(jqxhr) + "\n Respons text: " + jqxhr.responseText + "\n status: " + status);

            $(this).attr("disabled", "false");
            $(".wait").remove();

        },
    });
}

私のcheckout.csファイル

  namespace Ahooratech
    {

        public partial class Checkout : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }

            [WebMethod]
            public static string login(string obj)
            { return "{data:data}";}

    }

私はこのエラーを取得します:

応答テキスト: {"Message":"Type \u0027****System.Collections.Generic.IDictionary `2****[[System.String, mscorlib, Version= 4.0.0.0 , Culture=neutral, PublicKeyToken=b77a5c561934e089 ],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]\u0027は配列の逆シリアル化ではサポートされていません .",

"StackTrace":" System.Web.Script.Serialization.ObjectConverter.ConvertListToObject (IList リスト、型の種類、JavaScriptSerializer シリアライザー、ブール値の throwOnError、IList\u0026 convertList) で\r\n System.Web.Script.Serialization.ObjectConverter で。 ConvertObjectToTypeInternal(Object o, Type タイプ, JavaScriptSerializer serializer, Boolean throwOnError, Object\u0026 convertObject)\r\n at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type タイプ, JavaScriptSerializer serializer, Boolean throwOnError, Object\ u0026 convertObject)\r\n System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\r\n at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T] (文字列入力)\r\n System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext コンテキスト、JavaScriptSerializer シリアライザー) で\r\n System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData) で、HttpContext コンテキスト)\r\n System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext コンテキスト、WebServiceMethodData methodData) で","ExceptionType":"System.InvalidOperationException"}WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}WebServiceMethodData methodData)","ExceptionType":"System.InvalidOperationException"}

編集: エラーはタイプ キャスティニーを表しますが、このキャスティングはどこにありますか? (JQueryには暗黙の型キャストがあると思います)

編集:これは、サーバーに送信するjson形式の私のobjコンテンツです

"[{"name":"userName","value":"admin"},{"name":"password","value":"admin_"}]"

私はこれに accountRegister() のこの行を考えました:

var obj = JSON.Stringify( {data:dataObj} );

そして WebMethod でこれを変更します:

public static string void login(Object data ) {

}

そしてそれは動作します!

しかし、どうすればデータをデシリアライズできますか

ここに画像の説明を入力

4

3 に答える 3

0

ログイン関数のパラメータをオブジェクト型に変更してもエラーにはならないと思います。

実際には、すべてのパラメーターを 1 つのオブジェクトとしてではなく、webmethod に個別に渡します。

于 2013-05-20T17:29:14.223 に答える