/// <summary>
        /// Method used to batch forward geocode a bunch of addresses.
        /// </summary>
        /// <param name="inputAddresses">A list of address strings.</param>
        /// <param name="fieldSettings">Our field settings object used to determine which additional data fields we want to query.</param>
        /// <returns>The results returned from Geocodio.</returns>
        public async Task <BatchForwardGeoCodeResult> ForwardGeocodeAsync(List <string> inputAddresses, GeocodioDataFieldSettings fieldSettings)
        {
            string fieldQueryString = this.PrepareDataFieldsQueryString(fieldSettings);

            string jsonDataString = JsonConvert.SerializeObject(inputAddresses);

            string responseData = await BatchForwardGeocodeWebRequest(jsonDataString, fieldQueryString);

            BatchForwardGeoCodeResult results = JsonConvert.DeserializeObject <BatchForwardGeoCodeResult>(responseData);

            return(results);
        }
        /// <summary>
        /// Transforms batch forward geocode results into a dictionary keyed by the address that was queried.  Puts duplicate requests
        /// into the same list and returns a 0 item list when no results are returned.
        /// </summary>
        /// <param name="results"></param>
        /// <returns>A dictionary of GeoCodeInfo (the results) keyed keyed by the address that was queried.</returns>
        public static Dictionary <string, List <GeoCodeInfo> > MakeForwardResultsDict(BatchForwardGeoCodeResult results)
        {
            Dictionary <string, List <GeoCodeInfo> > resultsDict = new Dictionary <string, List <GeoCodeInfo> >();

            foreach (BatchForwardGeoCodeRecord record in results.Results)
            {
                //Make sure have something to use...
                if (record.Response.Results.Length > 0)
                {
                    if (resultsDict.ContainsKey(record.Query))
                    {
                        //Geocoded same plce twice in same request to Geocodio
                        resultsDict[record.Query].AddRange(record.Response.Results);
                    }
                    else
                    {
                        resultsDict.Add(record.Query, new List <GeoCodeInfo>());
                        resultsDict[record.Query].AddRange(record.Response.Results);
                    }
                }
                else
                {
                    resultsDict.Add(record.Query, new List <GeoCodeInfo>(0));
                }
            }
            return(resultsDict);
        }