public async Task <PlaceDetailsResult> GetPlaceDetailsAsync(string placeId, CancellationToken ct)
        {
            var        now     = DateTime.Now;
            UriBuilder baseUri = new UriBuilder(baseUrl + placeDetailsResource);

            AppendQuery(baseUri, placeIdKey, placeId);
            AppendQuery(baseUri, typesParamString, fieldsString);
            AppendQuery(baseUri, apiKeyParamKey, apiKey);

            WebRequest request = WebRequest.Create(baseUri.ToString());

            request.Proxy = null;

            var response = await request.GetResponseAsync(ct);

            StreamReader reader = new StreamReader(response.GetResponseStream());

            string             responseText = reader.ReadToEnd();
            PlaceDetailsResult results      = JsonConvert.DeserializeObject <PlaceDetailsResult>(responseText);

            var start = now;

            now = DateTime.Now;
            return(results);
        }
        private async Task <string> GetFullAddressString()
        {
            try
            {
                if (suggestionsList.SelectedIndex >= 0)
                {
                    string placeId = AddressPlaceIds[(string)suggestionsList.SelectedItem];

                    PlaceDetailsResult placeDetailsResult = await addressAutoCompletionService.GetPlaceDetailsAsync(placeId, cts.Token);

                    Address address = new Address();
                    if (placeDetailsResult.Status == "OK" && placeDetailsResult.Result?.Address_Components != null &&
                        placeDetailsResult.Result.Address_Components.Any())
                    {
                        foreach (PlaceDetailsResult.AddressComponent addressComponent in placeDetailsResult.Result
                                 .Address_Components)
                        {
                            if (addressComponent.Types.Any(x => x == "street_number"))
                            {
                                address.StreetNo = addressComponent.Short_Name;
                            }

                            else if (addressComponent.Types.Any(x => x == "route"))
                            {
                                address.StreetName = addressComponent.Short_Name;
                            }

                            else if (addressComponent.Types.Any(x => x == "locality"))
                            {
                                address.Locality = addressComponent.Short_Name;
                            }

                            else if (addressComponent.Types.Any(x => x == "administrative_area_level_1"))
                            {
                                address.StateOrTerritory = addressComponent.Short_Name;
                            }

                            else if (addressComponent.Types.Any(x => x == "country"))
                            {
                                address.Country = addressComponent.Long_Name;
                            }

                            else if (addressComponent.Types.Any(x => x == "postal_code"))
                            {
                                address.PostCode = addressComponent.Short_Name;
                            }
                        }
                    }

                    return(address.ToString());
                }
            }
            catch (OperationCanceledException)
            {
            }
            return(null);
        }