/// <summary>
        /// Called when [action executed].
        /// </summary>
        /// <param name="filterContext">The filter context.</param>
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            if (filterContext != null &&
                filterContext.Exception != null &&
                ExceptionResult != null)
            {
                var result = Activator.CreateInstance(ExceptionResult) as ISerializableExceptionResult;
                result.ExceptionMessage = filterContext.Exception.Message;
                result.Exception        = filterContext.Exception;

                if (filterContext.Exception is HttpException)
                {
                    result.ModelSerializer.StatusCode        = (filterContext.Exception as HttpException).GetHttpCode();
                    result.ModelSerializer.StatusDescription = ((HttpStatusCode)result.ModelSerializer.StatusCode).ToString().FromPascalCase();
                }

                filterContext.Result           = result as ActionResult;
                filterContext.ExceptionHandled = true;
            }

            if (filterContext.Result is ViewResult)
            {
                var result = filterContext.Result as ViewResult;
                var view   = result.View as SerializedView;

                switch ((ResponseType)filterContext.RouteData.Values["responseType"])
                {
                case ResponseType.JavaScript:
                    result.View = new JavaScriptCallbackResult();
                    break;

                case ResponseType.Json:
                    result.View = new JsonView();
                    break;

                case ResponseType.Xml:
                    result.View = new XmlView();
                    break;

                case ResponseType.Csv:
                    result.View = new CsvResult();
                    break;

                case ResponseType.Html:
                default:
                    break;
                }

                if (result.View is SerializedView && view != null)
                {
                    ServiceHelper.CopyProperties(view, (SerializedView)result.View);
                }
            }
            else if (filterContext.Result is ISerializableActionResult && !typeof(SerializedResult).IsAssignableFrom(filterContext.Result.GetType()))
            {
                ISerializableActionResult result = filterContext.Result as ISerializableActionResult;

                switch ((ResponseType)filterContext.RouteData.Values["responseType"])
                {
                case ResponseType.JavaScript:
                case ResponseType.Json:
                case ResponseType.Xml:
                case ResponseType.Csv:
                    var resultX = new SerializedResult(result.Model);
                    ServiceHelper.CopyProperties(result.ModelSerializer, resultX.ModelSerializer);
                    break;

                case ResponseType.Html:
                default:
                    filterContext.Result = (ActionResult)result;
                    break;
                }
            }
        }