数组的反序列化不支持类型System.Collections.Generic.IDictionary

DJL*_*DJL 2 .net javascript ajax jquery pagemethods

使用手动构造的JQuery.ajax调用调用页面方法时,可能会发生此错误.

反序列化由.NET完成,而不是在用户代码中完成.

JavaScript的:

MyParam = []; 
... 
$.ajax({ type: 'POST', 
         url: 'PageOrService.as?x/DoSomething',
         data: JSON.stringify(MyParam), 
         contentType: "application/json; charset=utf-8", 
         dataType: "json", 
         complete: function (a, b, c, d) { console.log(a, b, c, d); } 
       });
Run Code Online (Sandbox Code Playgroud)

C#

[WebMethod()] 
public static void DoSomething(object ParamName) 
{ 
  ParamName.ToString();
}
Run Code Online (Sandbox Code Playgroud)

DJL*_*DJL 5

在我的实例中,这在jquery ajax调用中被证明是一个错误的数据包.数据包应该是键值对的对象,web方法的每个参数都有一个键.

如果你的方法有多个参数,这可能是显而易见的,但如果不这样做,很容易假设你只需传递参数内容:

这个:

data: JSON.stringify(MyParam), 
Run Code Online (Sandbox Code Playgroud)

应该这样:

data: JSON.stringify({ParamName:MyParam}),
Run Code Online (Sandbox Code Playgroud)

很明显,如果你知道的话 - 如果你不知道的话就会刮胡子!

有关详细信息,请参阅我的博文