public async Task <IResult <IVenueSearchResult> > GetVenuesByPRNAndNameAsync(IGetVenuesByPRNAndNameCriteria criteria)
        {
            Throw.IfNull(criteria, nameof(criteria));
            _logger.LogMethodEnter();

            try
            {
                _logger.LogInformationObject("Get Venue By PRN & Name criteria.", criteria);
                _logger.LogInformationObject("Get Venue By PRN & Name URI", _getVenueByPRNAndNameUri);

                var content  = new StringContent(criteria.ToJson(), Encoding.UTF8, "application/json");
                var response = await _httpClient.GetAsync(_getVenueByPRNAndNameUri + $"?PRN={criteria.PRN}&NAME={criteria.Name}");

                _logger.LogHttpResponseMessage("Get Venue By PRN and Name service http response", response);
                if (response.IsSuccessStatusCode)
                {
                    var json = await response.Content.ReadAsStringAsync();

                    _logger.LogInformationObject("Venue search service json response", json);

                    //var settings = new JsonSerializerSettings
                    //{
                    //    ContractResolver = new VenueSearchResultContractResolver()
                    //};
                    //var venues = JsonConvert.DeserializeObject<IEnumerable<Venue>>(json, settings).Where(x=>x.Status== VenueStatus.Imported || x.Status == VenueStatus.Live).OrderBy(x => x.VenueName).ToList();
                    //var venues = JsonConvert.DeserializeObject<IEnumerable<Venue>>(json, settings).OrderBy(x => x.VenueName).ToList();
                    IEnumerable <Venue> venues = Enumerable.Empty <Venue>();
                    if (!string.IsNullOrEmpty(json))
                    {
                        venues = JsonConvert.DeserializeObject <IEnumerable <Venue> >(json).OrderBy(x => x.VenueName).ToList();
                    }
                    //var venues = JsonConvert.DeserializeObject<IEnumerable<Venue>>(json).OrderBy(x => x.VenueName).ToList();
                    var venueSearchResult = new VenueSearchResult(venues);
                    return(Result.Ok <IVenueSearchResult>(venueSearchResult));
                    //return venues;
                }
                else
                {
                    return(Result.Fail <IVenueSearchResult>("Get Venue By PRN & Name service unsuccessful http response"));
                }
            }

            catch (HttpRequestException hre)
            {
                _logger.LogException("Get Venue By PRN and Name service http request error", hre);
                return(Result.Fail <IVenueSearchResult>("Get Venue By PRN and Name service http request error."));
            }
            catch (Exception e)
            {
                _logger.LogException("Get Venue By PRN and Name service unknown error.", e);
                return(Result.Fail <IVenueSearchResult>("Get Venue By PRN and Name service unknown error."));
            }
            finally
            {
                _logger.LogMethodExit();
            }
        }
        internal static string ToJson(this IGetVenuesByPRNAndNameCriteria extendee)
        {
            GetVenueByPRNAndNameJson json = new GetVenueByPRNAndNameJson
            {
                PRN  = extendee.PRN,
                Name = extendee.Name
            };

            return(JsonConvert.SerializeObject(json));
        }
        public async Task <IResult <IVenueSearchResult> > GetVenuesByPRNAndNameAsync(IGetVenuesByPRNAndNameCriteria criteria)
        {
            Throw.IfNull(criteria, nameof(criteria));
            _logger.LogMethodEnter();

            try
            {
                _logger.LogInformationObject("Get Venue By PRN & Name criteria.", criteria);
                _logger.LogInformationObject("Get Venue By PRN & Name URI", _getVenueByPRNAndNameUri);

                //StringContent content = new StringContent(criteria.ToJson(), Encoding.UTF8, "application/json");
                HttpClient httpClient = new HttpClient();
                httpClient.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", _settings.ApiKey);
                HttpResponseMessage response = await httpClient.GetAsync(_getVenueByPRNAndNameUri + $"?prn={criteria.PRN}&name={criteria.Name}");

                _logger.LogHttpResponseMessage("Get Venue By PRN and Name service http response", response);
                if (response.IsSuccessStatusCode)
                {
                    string json = await response.Content.ReadAsStringAsync();

                    _logger.LogInformationObject("Venue search service json response", json);

                    if (string.IsNullOrEmpty(json))
                    {
                        json = "[]";
                    }

                    JsonSerializerSettings settings = new JsonSerializerSettings
                    {
                        ContractResolver = new VenueSearchResultContractResolver()
                    };
                    IEnumerable <Venue> venues = JsonConvert.DeserializeObject <IEnumerable <Venue> >(json, settings);
                    return(Result.Ok <IVenueSearchResult>(new VenueSearchResult(venues)));
                }
                else
                {
                    return(Result.Fail <IVenueSearchResult>("Get Venue By PRN & Name service unsuccessful http response"));
                }
            }

            catch (HttpRequestException hre)
            {
                _logger.LogException("Get Venue By PRN and Name service http request error", hre);
                return(Result.Fail <IVenueSearchResult>("Get Venue By PRN and Name service http request error."));
            }
            catch (Exception e)
            {
                _logger.LogException("Get Venue By PRN and Name service unknown error.", e);
                return(Result.Fail <IVenueSearchResult>("Get Venue By PRN and Name service unknown error."));
            }
            finally
            {
                _logger.LogMethodExit();
            }
        }