2011-01-07 15 views
11

DateTimeとして定義されたパラメータを持つWebMethodがあります。私はそのWebMethod(ASMX)にDateTime値を渡す方法

Webサービスを呼び出すと、私はこのエラーを取得する:

at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializePrimitiveObject() at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input) at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer) at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context) at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)"

これは私の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(); 
    } 

} 

そしてここで、私のクライアント側のコード:

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);         

          } 
         }); 

'開始'と '終了'時間は、2つのjavascript 'Date'オブジェクトです。

答えて

9

ASP.NET Ajaxが期待する特定の日付/時刻のワイヤ形式 - "\/Date(x)\/"の形式(xは1970年1月1日(UTC)の深夜0時からの経過時間です)があるためです。だから本質的には、サービスを呼び出すときにJS日付を必要な形式に変換するヘルパー関数を使用する必要があります(サービスからJS date/timeオブジェクトへの日付/時刻json)。

http://schotime.net/blog/index.php/2008/07/01/jquery-plugin-for-aspnet-ajax-jmsajax/

あなたが見つけることができます:

だから、あなたは、プラグインの下に使用するために、このような

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

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

する最も簡単な方法として、コードの一部を変更する必要があります以下の記事の詳細:

http://www.overset.com/2008/07/18/simple-jquery-json-aspnet-webservice-datetime-support/

http://schotime.net/blog/index.php/2008/06/19/jquery-ajax-aspnet-and-dates/

http://msmvps.com/blogs/luisabreu/archive/2009/08/19/jquery-full-control-with-the-ajax-function.aspx

+0

VinayC、ありがとうございました!私はjMsAjaxについて知らなかった。 – Cleiton

+0

jMsAjaxプラグインは、最新バージョンのjQuery(1.6.2)では動作しないようです。 – Gan

+0

@Gan、あなたはあなたの問題/バグを彼のブログエントリーへのコメント(回答のリンク)として著者に報告するかもしれません。 – VinayC

1

これが私の仕事:

JSON.stringify(new Date()) 

をこれが "2014-06-04T14:26:27.129Z" のような形式に変換し、これは、私のWebサービスがDateTimeパラメータを受け入れることを喜んでしています。

関連する問題