将数据从jquery ajax请求传递到wcf服务失败反序列化?

时间:2009-02-26 07:30:21

标签: jquery wcf json

4 个答案:

答案 0 :(得分:33)

在要发送给服务的JSON中使用双引号而不是单引号。也就是说,改变:

data: "{'customerId': '2'}",

data: '{"customerId": "2"}',

我在本地测试了这个,这解决了这个问题。

顺便说一句,我使用我在使用内置ASP.NET工具以外的库调用ASMX和WCF服务时经常使用的方法对此进行了调试。我使用由asp:ScriptReference创建的客户端代理调用该服务,然后使用HTTP嗅探器(例如FireFox的HttpFox)检查发送到服务器的请求,并将请求与正在发送的请求进行比较由jQuery。然后,您通常可以快速查看请求的不同之处(也可能是错误的)。在这种情况下,很明显发送的POST数据存在差异。

答案 1 :(得分:2)

我只是认为发布对于用户名和密码登录功能至关重要,所以这就是我对发送给Web服务的JSon参数进行编码的方式......

这是Webservice合同..

    [ServiceContract]
    public interface ILogonService
    {
    [OperationContract]
    [WebInvoke(
      Method = "POST",
      BodyStyle = WebMessageBodyStyle.WrappedRequest,
      ResponseFormat = WebMessageFormat.Json
    )]
    string Logon(string un, string pw);
    }

这是JQuery(注意使用“和'很重要!)

$.ajax({
  type: 'POST',
  url: "/LogonService.svc/Logon",
  data: '{ "un": "' + $('#un').val() + '", "pw": "' + $('#pw').val() + '"}',
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (data) {    
  }
});

答案 2 :(得分:1)

我在jscript中做了一个函数,解决了通过POST将数据发送到WCF服务的问题...按照代码...

function formatJsonDataToWCFPost(d){

var t = {};
var a = '{';
for (var j = 0; j < d.length; j++) {
    var x = d[j];
    for (var i in x) {
        if (x.hasOwnProperty(i)) {
            var c = j + 1 == d.length ? '}' : ',';
            a += ('"' + i + '":"' + x[i] + '"' + c);
        }
    }
}

return a;

}

答案 3 :(得分:0)

我认为你的操作需要这个属性:

[WebInvoke(Method="POST",
           BodyStyle=WebMessageBodyStyle.Wrapped,
           ResponseFormat=WebMessageFormat.Json
)]

有关详细信息,请参阅jQuery AJAX calls to a WCF REST Service