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 ) {
}
そしてそれは動作します!
しかし、どうすればデータをデシリアライズできますか