我知道有很多关于通过JQuery / JSON使用WCF REST的文章,但是我无法使其正常工作。我目前停留在日期参数上。以下是我的C#方法:
[OperationContract] [WebInvoke] [TransactionFlow(TransactionFlowOption.Allowed)] string GoodRegister(DateTime pDtTimeStampTransac, Int32 pIDResource, Decimal pQty, enQtyLogType pQtyGoodLogType);
以下是我的JavaScript代码:
/// <reference path="../Scripts/jquery-1.4.1-vsdoc.js" /> /// <reference path="json.js" /> Date.prototype.toMSJSON = function () { var date = '\\\/Date(' + this.getTime() + ')\\\/'; return date; }; function botaoclick() { var date = new Date().toMSJSON(); var datavar = { 'pDtTimeStampTransac': date, 'pIDResource': 1, 'pQty': 1 }; $.ajax( { type: "POST", contentType: "application/json; charset=utf-8", url: "http://desk01:9876/ShopFloorService/script/GoodRegister", dataType: "json", data: JSON.stringify(datavar), //data: '{"pDtTimeStampTransac":date, "pIDResource":"teste", "pQty":"3"}', error: jqueryError, success: function (msg) { alert("back"); var divForResult = document.getElementById("test"); divForResult.innerHTML = "Result: <b>" + msg.d + "</b>"; } } ) } function jqueryError(request, status, error) { alert(request.responseText + " " + status + " " + error); }
我的第一个问题是我不断收到日期序列化错误:
{"ExceptionDetail":{"HelpLink":null,"InnerException":{"HelpLink":null,"InnerException":{"HelpLink":null,"InnerException":null,"Message":"DateTime content '\\\/Date(1292616078638)\\\/' does not start with '\\\/Date(' and end with ')\\\/' as required for JSON.","StackTrace":" at System.Runtime.Serialization.Json.JsonReaderDelegator.ParseJsonDate(String originalDateTimeValue)\u000d\u000a at
它说它不会以开始和结束的方式开始/结束。
我的第二个问题是:我是否必须乘坐枚举数,还是有发送方法?
我拔了很多头发,为此流下了很多眼泪,但这确实可行。我修改了 toMSJSON 函数中的日期格式。WCF接受这种格式,我感谢Rick Strahl意识到了这一点。
Date.prototype.toMSJSON = function () { var date = '/Date(' + this.getTime() + ')/'; //CHANGED LINE return date; };
您还需要将日期转换为UTC时间,否则您会得到各种有趣的东西,因此:
var dt = ...; var dt1 = new Date(Date.UTC(dt.getFullYear(), dt.getMonth(), dt.getDate(), dt.getHours(), dt.getMinutes(), dt.getSeconds(), dt.getMilliseconds())); var wcfDateStr = dt1.toMSJSON();
希望这可以帮助。