/// <summary>
        /// Converts the <paramref name="serializableError"/> to an <see cref="ODataError"/>.
        /// </summary>
        /// <param name="httpserializableErrorError">The <see cref="SerializableError"/> instance to convert.</param>
        /// <returns>The converted <see cref="ODataError"/></returns>
        public static ODataError CreateODataError(this SerializableError serializableError)
        {
            if (serializableError == null)
            {
                throw Error.ArgumentNull("serializableError");
            }

            return(new ODataError
            {
                Message = serializableError.GetPropertyValue <string>(SerializableErrorKeys.MessageKey),
                ErrorCode = serializableError.GetPropertyValue <string>(SerializableErrorKeys.ErrorCodeKey),
                InnerError = ToODataInnerError(serializableError)
            });
        }
        /// <summary>
        /// Converts the <paramref name="serializableError"/> to an <see cref="ODataError"/>.
        /// </summary>
        /// <param name="serializableError">The <see cref="SerializableError"/> instance to convert.</param>
        /// <returns>The converted <see cref="ODataError"/></returns>
        public static ODataError CreateODataError(this SerializableError serializableError)
        {
            if (serializableError == null)
            {
                throw Error.ArgumentNull("serializableError");
            }

            string message = serializableError.GetPropertyValue <string>(SerializableErrorKeys.MessageKey);
            string details = ConvertModelStateErrors(serializableError);

            return(new ODataError
            {
                Message = string.IsNullOrEmpty(message) ? details : message,
                ErrorCode = serializableError.GetPropertyValue <string>(SerializableErrorKeys.ErrorCodeKey),
                InnerError = ToODataInnerError(serializableError),
                Details = serializableError
                          .Select(kvp => new ODataErrorDetail()
                {
                    Message = kvp.Key + ":" + kvp.Value,
                })
                          .AsCollection(),
            });
        }
        /// <summary>
        /// Converts the <paramref name="serializableError"/> to an <see cref="ODataError"/>.
        /// </summary>
        /// <param name="httpserializableErrorError">The <see cref="SerializableError"/> instance to convert.</param>
        /// <returns>The converted <see cref="ODataError"/></returns>
        public static ODataError CreateODataError(this SerializableError serializableError)
        {
            if (serializableError == null)
            {
                throw Error.ArgumentNull("serializableError");
            }

            return(new ODataError
            {
                Message = JsonConvert.SerializeObject(serializableError.Values),//serializableError.GetPropertyValue<string>(SerializableErrorKeys.MessageKey),
                ErrorCode = serializableError.GetPropertyValue <string>(SerializableErrorKeys.ErrorCodeKey),
                InnerError = ToODataInnerError(serializableError),
                Details = ConvertModelStateErrorItems(serializableError)
            });
        }
        private static ODataInnerError ToODataInnerError(SerializableError serializableError)
        {
            string innerErrorMessage = serializableError.GetPropertyValue <string>(SerializableErrorKeys.ExceptionMessageKey);

            if (innerErrorMessage == null)
            {
                string messageDetail = serializableError.GetPropertyValue <string>(SerializableErrorKeys.MessageDetailKey);
                if (messageDetail == null)
                {
                    SerializableError modelStateError = serializableError.GetPropertyValue <SerializableError>(SerializableErrorKeys.ModelStateKey);
                    return((modelStateError == null) ? null
                        : new ODataInnerError {
                        Message = ConvertModelStateErrors(modelStateError)
                    });
                }
                else
                {
                    return(new ODataInnerError()
                    {
                        Message = messageDetail
                    });
                }
            }
            else
            {
                ODataInnerError innerError = new ODataInnerError();
                innerError.Message    = innerErrorMessage;
                innerError.TypeName   = serializableError.GetPropertyValue <string>(SerializableErrorKeys.ExceptionTypeKey);
                innerError.StackTrace = serializableError.GetPropertyValue <string>(SerializableErrorKeys.StackTraceKey);
                SerializableError innerExceptionError = serializableError.GetPropertyValue <SerializableError>(SerializableErrorKeys.InnerExceptionKey);
                if (innerExceptionError != null)
                {
                    innerError.InnerError = ToODataInnerError(innerExceptionError);
                }
                return(innerError);
            }
        }