Convertire le date JavaScript per un servizio .NET WCF
Una chiamata .NET WCF in formato JSON come la seguente:
si aspetta di ricevere le date in un un formato particolare che è simile a questo:
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:
La funzione inversa, per convertire una date in formato WCF JSON in un oggetto data JavaScript, è 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);
Text
/Date(1358204400000+0100)/
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:return '/Date(' + dt.getTime() + '-0000)/';
senza le doppie slash e le virgolette.
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)));
}