Una chiamata .NET WCF in formato JSON come la seguente:

C#

[OperationContract]
[WebInvoke(UriTemplate = "Tasks/Add"
  , BodyStyle = WebMessageBodyStyle.WrappedRequest
  , RequestFormat = WebMessageFormat.Json
  , ResponseFormat = WebMessageFormat.Json)]
ServiceStatus TasksAdd(int id, DateTime dateBegin, DateTime? dateEnd);
si aspetta di ricevere le date in un un formato particolare che è simile a questo:

Text

/Date(1358204400000+0100)/
che corrisponde alla data Tue Jan 15 00:00:00 UTC+0100 2013.

Per convertire un oggetto data JavaScript in formato WCF JSON, si può usare questa funzione:

JavaScript

function formatJSONDate(dt) {
  return '"\\/Date(' + dt.getTime() + '-0000)\\/"';
}
Nel caso di un wcf SharePoint il dato ritornato dovrà essere:

return '/Date(' + dt.getTime() + '-0000)/';

senza le doppie slash e le virgolette.
la chiamata AJAX sarà tipo:

JavaScript

var jsonParam = '{"id":"' + item.id
  + '","dateBegin":' + formatJSONDate(dtBegin)
  + ',"dateEnd": null'
  + '}';

$.ajax({
  type: "POST",
  url:  "/_vti_bin/Sgart.svc/Tasks/Add",
  data: jsonParam,
  processData: false,
  cache: false,
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function (data, textStatus, jqXHR) { ... },
  error: function (jqXHR, textStatus, errorThrown) { ... }
});
Attenzione qualsiasi chiamata al WCF con un formato data non valido o inferiore al 1/1/1970 UTC, genererà un errore e non invocherà il WCF.

La funzione inversa, per convertire una date in formato WCF JSON in un oggetto data JavaScript, è la seguente:

JavaScript

function convertJSONDate(wcfDate) {
  return new Date(parseInt(wcfDate.substr(6)));
}
Tags:
ASP.NET54 .NET66 HTML74 JavaScript184 JQuery33 JSON31 WCF18
Potrebbe interessarti anche: