Una chiamata
.NET WCF in formato
JSON come la seguente:
[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:
/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:
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:
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:
function convertJSONDate(wcfDate) {
return new Date(parseInt(wcfDate.substr(6)));
}