带有System.DateTime参数的JSON WCF服务

时间:2013-05-29 15:57:33

标签: jquery asp.net json wcf date

我创建了以下JSON WCF服务,它接受.NET System.DateTime值作为输入参数:

[OperationContract]
[WebGet(ResponseFormat=WebMessageFormat.Json)]
ReclaimedH2OMetric GetCurrentReclaimedH2OMetric(System.DateTime currentDate);

当我尝试在网页中使用jQuery使用服务时,出现以下错误:

  

服务器在处理请求时遇到错误。例外   消息是'SqlDateTime溢出。必须在1/1/1753 12:00:00之间   AM和12/31/9999 11:59:59 PM。'

这是我的jQuery代码:

var rawResults;
var currentDate = new Date('10/1/2012');
var jsonDate = '\\/Date(' + currentDate.getTime() + ')\\/';

$.ajax(
{
    async: false,
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "http://www.mydomain.com/Dashboard_WaterResources/WCFService/Dashboard.svc/GetCurrentReclaimedH2OMetric",
    dataType: "json",
    data: '{"currentDate": "' + jsonDate + '"}',
    success: function (results) {
        rawResults = results;
    },
    error: function (xhr) {
        alert(xhr.responseText);
    }
});

以下代码行var jsonDate = '\\/Date(' + currentDate.getTime() + ')\\/';尝试使用this问题作为参考,以适当的JSON格式设置日期格式

2 个答案:

答案 0 :(得分:0)

jsonDate中的整数应该是自纪元以来的毫秒数。

How to convert JavaScript date object to ticks

或者考虑使用Moment.js来获取毫秒数。

答案 1 :(得分:0)

我修改了WCF服务签名以接受long数据类型而不是System.DateTime对象。

另外,我遇​​到了如何格式化data jQuery调用的ajax属性的问题。以下是更新后的代码:

var rawResults;
var currentDate = new Date('10/1/2012 12:00 AM');
var jsonDate = ConvertDateToTicks(currentDate);

$.ajax(
{
    async: false,
    type: "GET",
    contentType: "application/json; charset=utf-8",
    url: "http://localhost/Dashboard_WaterResources/WCFService/Dashboard.svc/GetCurrentReclaimedH2OMetric",
    data: { dateInTicks: jsonDate },
    success: function (results) {
        rawResults = results;
    },
    error: function (xhr) {
        alert(xhr.responseText);
    }
});