string generateErrors(StreamReader reader, WebException wex)
        {
            var result = reader.ReadToEnd();
            HttpStatusCode statusCode = GetHttpStatusCode(wex);
            if (HttpStatusCode.Unauthorized == statusCode)
            {
                Errors error = JsonConvert.DeserializeObject<Errors>(result);
                var _errors = new
                {
                    errors = new[] { error }
                };
                string jsons = JsonConvert.SerializeObject(_errors, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
                return jsons;
            }
            if (HttpStatusCode.BadRequest == statusCode)
            {
                return result;
            }

            dynamic data = JsonConvert.DeserializeObject(result);

            if (data != null && (data.cause != null || data.message != null))
            {
                Errors error = JsonConvert.DeserializeObject<Errors>(result);
                var _errors = new
                {
                    errors = new[] { error }
                };
                string jsons = JsonConvert.SerializeObject(_errors, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
                return jsons;
            }
            else
            {
                Errors error = new Errors();
                error.Status = "BAD_REQUEST";
                error.Code = "9995";
                error.Location = "404 not found.";
                error.Reason = "No records Found";
                error.Severity = "ERROR";
                var _errors = new
                {
                    errors = new[] { error }
                };
                string jsons = JsonConvert.SerializeObject(_errors, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
                return jsons;

            }
        }
        /// <summary> 
        /// Perform a new query that retrieves you the Transaction results from a set of parameters.
        ///
        /// <param name="parameters"> 
        /// String parameters: the set of parameters to search the transactions.
        /// </param>
        /// <returns>
        /// a TransactionReportInformation List object.
        /// </returns>   
        /// <seealso cref="PayHubWS.com.payhub.ws.api.TransactionReportInformation"/>
        /// </summary> 
        public List<TransactionReportInformation> findTransactions(TransactionSearchParameters parameters)
        {
            String url = _url + "report/transactionReport";
            HttpWebRequest request = setHeadersPost(url, this._oauthToken);
            string json = JsonConvert.SerializeObject(parameters, Formatting.None, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });
            string result = findTransactionReports(request, json);
            List<TransactionReportInformation> response = new List<TransactionReportInformation>();
            try
            {
                response = JsonConvert.DeserializeObject<List<TransactionReportInformation>>(result.ToString());
            }
            catch {
                try
                {
                    var node = JObject.Parse(result);
                    List<Errors> errors = JsonConvert.DeserializeObject<List<Errors>>(node["errors"].ToString());
                    TransactionReportInformation t = new TransactionReportInformation();
                    t.Errors = errors;
                    response.Add(t);
                }
                catch {
                    List<Errors> errors = new List<Errors>();
                    Errors error = new Errors();
                    error.Reason = "Unknown Error";
                    errors.Add(error);
                    TransactionReportInformation t = new TransactionReportInformation();
                    t.Errors = errors;
                    response.Add(t);
                }
            }

            return response;
        }