Asp.net 如何将日期时间值传递给WebMethod(ASMX)

Asp.net 如何将日期时间值传递给WebMethod(ASMX),asp.net,json,asmx,webservice-client,Asp.net,Json,Asmx,Webservice Client,我有一个WebMethod,其参数定义为DateTime。当我这么说的时候 webservice,我收到以下错误: 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 深度)在 System

我有一个WebMethod,其参数定义为DateTime。当我这么说的时候

webservice,我收到以下错误:

在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() 在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 深度)在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 深度)在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 深度)在 System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(字符串 输入,Int32 depthLimit, JavaScriptSerializer(序列化程序)位于 System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer 序列化程序,字符串输入,类型, Int32(深度限制)at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](字符串 输入)在 System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext 上下文,JavaScriptSerializer 序列化程序)在 System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData,HttpContext)位于 System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext 上下文,WebServiceMethodData 方法数据“

这是我的Web服务:

/// <summary>
/// Summary description for AgendamentoService
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class AgendamentoService : System.Web.Services.WebService
{

    public AgendamentoService()
    {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public CompromissoWekCalendarVO[] GetCompromissos(int id_pessoa, DateTime start, DateTime end)
    {
        bo.CompromissoBO compBO = new bo.CompromissoBO();
        return compBO.Get(id_pessoa,start, end).ToArray();
    }

}
//
///AgendamentoService的摘要说明
/// 
[WebService(命名空间=”http://tempuri.org/")]
[WebServiceBinding(ConformsTo=WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
公共类代理服务:System.Web.Services.WebService
{
公共代理服务()
{
//如果使用设计的组件,请取消注释以下行
//初始化组件();
}
[网络方法]
公共折衷SowekCalendarVO[]获取折衷SoS(int-id_-pessoa,日期时间开始,日期时间结束)
{
bo.commissionsobo compBO=新的bo.commissionsobo();
返回compBO.Get(id_pessoa,start,end).ToArray();
}
}
这里是我的客户端代码:

 var params =  '{id_pessoa: "' + id_pessoa + '", start:/Date('+ start.getTime()+')/, end:/Date(' + end.getTime()+')/}';
                    $.ajax(  
                         {  
                             type: "POST",  
                             dataType: "json",
                             contentType: "application/json; charset=utf-8",  
                             url: '<%= this.ResolveClientUrl("~/services/misc/AgendamentoService.asmx/GetCompromissos") %>',  
                             data: params,  
                             success: function (json) {  

                                if ($.isArray(json.d)) {
                                  $.each(json.d, function(key, value) {
                                    value.start = getJsonDate(value.start);
                                    value.end = getJsonDate(value.end);
                                  });
                                }

                                callback(json.d);                                 

                             }  
                         });
var params='{id_pessoa:“+id_pessoa+”,开始日期('+start.getTime()+')/,结束日期('+end.getTime()+')/”;
$.ajax(
{  
类型:“POST”,
数据类型:“json”,
contentType:“应用程序/json;字符集=utf-8”,
url:“”,
数据:params,
成功:函数(json){
if($.isArray(json.d)){
$.each(json.d,函数(键,值){
value.start=getJsonDate(value.start);
value.end=getJsonDate(value.end);
});
}
回调(json.d);
}  
});

其中“开始”和“结束”时间是两个javascript“日期”对象。

这是因为ASP.NET Ajax需要特定的日期/时间线格式,其形式为
“\/Date(x)\/“
,其中x是自1970年1月1日UTC午夜以来经过的毫秒数。因此,本质上,您需要使用一些助手函数,在调用服务时将JS日期转换为所需的格式(反之亦然,从服务到JS日期/时间对象的日期/时间json)

因此,您必须更改代码片段,例如

`'", start:/Date('+ start.getTime()+')/, end...` 

使用以下插件的最快方法:

您可以在以下文章中找到更多信息:

这对我很有效:

JSON.stringify(new Date())

这会将其转换为类似“2014-06-04T14:26:27.129Z”的格式,我的web服务很乐意接受该格式作为DateTime参数。

jMsAjax插件似乎无法与最新版本的jQuery(1.6.2)一起使用。@Gan,您可以将您的问题/错误报告给作者,作为对其博客条目的评论(答案中的链接)。
JSON.stringify(new Date())