使用date将JQuery JSON发送到WCF REST

Pas*_*cal 18 c# rest wcf jquery json

我知道有很多关于通过JQuery/JSON使用WCF REST的帖子,但我无法让它工作.我目前停留在日期参数.下面是我的C#方法:

[OperationContract]
[WebInvoke]
[TransactionFlow(TransactionFlowOption.Allowed)]
string GoodRegister(DateTime pDtTimeStampTransac, Int32 pIDResource, Decimal pQty, enQtyLogType pQtyGoodLogType);
Run Code Online (Sandbox Code Playgroud)

以下是我的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);
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是我不断收到日期序列化错误:

{"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 
Run Code Online (Sandbox Code Playgroud)

它说它不会以它开始和结束的方式开始/结束.

我的第二个问题是:我是否必须乘坐普查员,或者有办法发送它?

Vas*_*Vas 44

我掏出了很多头发并为此留下了一丝泪水,但这很有效.我修改了toMSJSON函数中的日期格式.WCF接受这种格式,我感谢Rick Strahl.

Date.prototype.toMSJSON = function () {
    var date = '/Date(' + this.getTime() + ')/'; //CHANGED LINE
    return date;
};
Run Code Online (Sandbox Code Playgroud)

你还需要将日期转换为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();
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.