Exemple #1
0
        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);
        }