public override object Read(ODataMessageReader messageReader, Type type, ODataDeserializerContext readContext) { object result = base.Read(messageReader, type, readContext); if (result is ODataActionParameters) { ODataActionParameters parameters = result as ODataActionParameters; foreach (var parameter in parameters.Select(p => new { p.Key, p.Value }).ToList()) { if (parameter.Value != null) { if (parameter.Value is DateTimeOffset) { IDependencyResolver dependencyResolver = readContext.Request.GetOwinContext() .GetDependencyResolver(); ITimeZoneManager timeZoneManager = dependencyResolver.Resolve <ITimeZoneManager>(); DateTimeOffset date = timeZoneManager.MapFromClientToServer(((DateTimeOffset)parameter.Value)); parameters[parameter.Key] = date; } else if (parameter.Value is IEnumerable <DateTimeOffset> ) { IDependencyResolver dependencyResolver = readContext.Request.GetOwinContext() .GetDependencyResolver(); ITimeZoneManager timeZoneManager = dependencyResolver.Resolve <ITimeZoneManager>(); IEnumerable <DateTimeOffset> dates = (IEnumerable <DateTimeOffset>)parameter.Value; parameters[parameter.Key] = FixIEnumerableOfDateTimes(dates, timeZoneManager); } else if (parameter.Value is string) { string initialString = parameter.Value.ToString(); foreach (IStringCorrector stringCorrector in _stringCorrectors) { initialString = stringCorrector.CorrectString(initialString); } parameters[parameter.Key] = initialString; } else if (parameter.Value is IEnumerable <string> ) { parameters[parameter.Key] = FixIEnumerableOfStrings((IEnumerable <string>)parameter.Value); } } } } else { throw new NotSupportedException(); } return(result); }