[DataContract()] public class ServiceRequest { [DataMember()] Nullable<DateTime> DateTimeFrom { get; set; } [DataMember()] Nullable<DateTime> DateTimeTo { get; set; } } [ServiceContract()] public interface IService { [WebInvoke(UriTemplate = "getServiceCall", Method = "POST")] ServResponse GetBusinessObjects(ServiceRequest filter); }Now, To start calling this method we need to construct a Json data representing the parameters.
var fromDate = new Date(2013, 06, 18); var toDate = new Date(); var datavar = { DateTimeFrom: fromDate.toMSJSON(), DateTimeTo: toDate.toMSJSON() }; var parameters = JSON.stringify(datavar);
But, before calling the toMSJSON on date object we need to define it as follows:
// Let Date type be compatible for Microsoft WCF Date.prototype.toMSJSON = function () { /// <summary>Let Date type be compatible for Microsoft WCF.</summary>var date = '/Date(' + this.getTime() + '-0000)/';
};
Getting DateTime from WCF
// convert WCF date to Javascript String.prototype.DateWCF = function () { /// <summary>convert string into Date</summary> var matches = this.match(/\/Date\(([0-9]+)(?:.*)\)\//); if (matches) return new Date(parseInt(matches[1])); };
Notice that when you use a date in javascript it is representing your local date based on the settings on your systemn and browser. As a result you might pass different notation to WCF. For example, my broweser has an timezone offset of -120 minutes. So when I ask to convert 06/20/2013 02:10:04 I see 2013-06-20T00:10:04.000Z which is perfectly normal because that represents the same exact time as I meant on my browser. Thus WCF will get the correct date aswell.