/// <summary>
        /// Initializes a new instance of the <see cref="GeocodePreferences" /> class.
        /// </summary>
        /// <param name="returnAllCandidateInfo">returnAllCandidateInfo (required).</param>
        /// <param name="fallbackToGeographic">fallbackToGeographic (required).</param>
        /// <param name="fallbackToPostal">fallbackToPostal (required).</param>
        /// <param name="maxReturnedCandidates">maxReturnedCandidates (required).</param>
        /// <param name="distance">distance (required).</param>
        /// <param name="streetOffset">streetOffset (required).</param>
        /// <param name="cornerOffset">cornerOffset (required).</param>
        /// <param name="matchMode">matchMode.</param>
        /// <param name="clientLocale">clientLocale.</param>
        /// <param name="clientCoordSysName">clientCoordSysName.</param>
        /// <param name="distanceUnits">distanceUnits.</param>
        /// <param name="streetOffsetUnits">streetOffsetUnits.</param>
        /// <param name="cornerOffsetUnits">cornerOffsetUnits.</param>
        /// <param name="mustMatchFields">mustMatchFields.</param>
        /// <param name="returnFieldsDescriptor">returnFieldsDescriptor.</param>
        /// <param name="outputRecordType">outputRecordType.</param>
        /// <param name="customPreferences">customPreferences.</param>
        /// <param name="preferredDictionaryOrders">preferredDictionaryOrders.</param>
        /// <param name="outputCasing">outputCasing.</param>
        /// <param name="latLongOffset">latLongOffset.</param>
        /// <param name="squeeze">squeeze.</param>
        /// <param name="returnLatLongFields">returnLatLongFields.</param>
        /// <param name="useGeoTaxAuxiliaryFile">useGeoTaxAuxiliaryFile.</param>
        /// <param name="latLongFormat">latLongFormat.</param>
        /// <param name="defaultBufferWidth">defaultBufferWidth.</param>
        /// <param name="returnCensusFields">returnCensusFields.</param>
        public GeocodePreferences(bool returnAllCandidateInfo = default(bool), string fallbackToGeographic = default(string), string fallbackToPostal = default(string), string maxReturnedCandidates = default(string), string distance = default(string), string streetOffset = default(string), string cornerOffset = default(string), string matchMode = default(string), string clientLocale = default(string), string clientCoordSysName = default(string), string distanceUnits = default(string), string streetOffsetUnits = default(string), string cornerOffsetUnits = default(string), FieldsMatching mustMatchFields = default(FieldsMatching), ReturnFieldsDescriptor returnFieldsDescriptor = default(ReturnFieldsDescriptor), string outputRecordType = default(string), Dictionary <string, Object> customPreferences = default(Dictionary <string, Object>), List <string> preferredDictionaryOrders = default(List <string>), string outputCasing = default(string), string latLongOffset = default(string), string squeeze = default(string), string returnLatLongFields = default(string), string useGeoTaxAuxiliaryFile = default(string), string latLongFormat = default(string), string defaultBufferWidth = default(string), string returnCensusFields = default(string))
        {
            // to ensure "returnAllCandidateInfo" is required (not null)
            if (returnAllCandidateInfo == null)
            {
                throw new InvalidDataException("returnAllCandidateInfo is a required property for GeocodePreferences and cannot be null");
            }
            else
            {
                this.ReturnAllCandidateInfo = returnAllCandidateInfo;
            }

            // to ensure "fallbackToGeographic" is required (not null)
            if (fallbackToGeographic == null)
            {
                throw new InvalidDataException("fallbackToGeographic is a required property for GeocodePreferences and cannot be null");
            }
            else
            {
                this.FallbackToGeographic = fallbackToGeographic;
            }

            // to ensure "fallbackToPostal" is required (not null)
            if (fallbackToPostal == null)
            {
                throw new InvalidDataException("fallbackToPostal is a required property for GeocodePreferences and cannot be null");
            }
            else
            {
                this.FallbackToPostal = fallbackToPostal;
            }

            // to ensure "maxReturnedCandidates" is required (not null)
            if (maxReturnedCandidates == null)
            {
                throw new InvalidDataException("maxReturnedCandidates is a required property for GeocodePreferences and cannot be null");
            }
            else
            {
                this.MaxReturnedCandidates = maxReturnedCandidates;
            }

            // to ensure "distance" is required (not null)
            if (distance == null)
            {
                throw new InvalidDataException("distance is a required property for GeocodePreferences and cannot be null");
            }
            else
            {
                this.Distance = distance;
            }

            // to ensure "streetOffset" is required (not null)
            if (streetOffset == null)
            {
                throw new InvalidDataException("streetOffset is a required property for GeocodePreferences and cannot be null");
            }
            else
            {
                this.StreetOffset = streetOffset;
            }

            // to ensure "cornerOffset" is required (not null)
            if (cornerOffset == null)
            {
                throw new InvalidDataException("cornerOffset is a required property for GeocodePreferences and cannot be null");
            }
            else
            {
                this.CornerOffset = cornerOffset;
            }

            this.MatchMode                 = matchMode;
            this.ClientLocale              = clientLocale;
            this.ClientCoordSysName        = clientCoordSysName;
            this.DistanceUnits             = distanceUnits;
            this.StreetOffsetUnits         = streetOffsetUnits;
            this.CornerOffsetUnits         = cornerOffsetUnits;
            this.MustMatchFields           = mustMatchFields;
            this.ReturnFieldsDescriptor    = returnFieldsDescriptor;
            this.OutputRecordType          = outputRecordType;
            this.CustomPreferences         = customPreferences;
            this.PreferredDictionaryOrders = preferredDictionaryOrders;
            this.OutputCasing              = outputCasing;
            this.LatLongOffset             = latLongOffset;
            this.Squeeze                = squeeze;
            this.ReturnLatLongFields    = returnLatLongFields;
            this.UseGeoTaxAuxiliaryFile = useGeoTaxAuxiliaryFile;
            this.LatLongFormat          = latLongFormat;
            this.DefaultBufferWidth     = defaultBufferWidth;
            this.ReturnCensusFields     = returnCensusFields;
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="Candidate" /> class.
 /// </summary>
 /// <param name="precisionLevel">precisionLevel.</param>
 /// <param name="formattedStreetAddress">formattedStreetAddress.</param>
 /// <param name="formattedLocationAddress">formattedLocationAddress.</param>
 /// <param name="identifier">identifier.</param>
 /// <param name="precisionCode">precisionCode.</param>
 /// <param name="sourceDictionary">sourceDictionary.</param>
 /// <param name="matching">matching.</param>
 /// <param name="geometry">geometry.</param>
 /// <param name="address">address.</param>
 /// <param name="ranges">ranges.</param>
 public Candidate(int precisionLevel = default(int), string formattedStreetAddress = default(string), string formattedLocationAddress = default(string), string identifier = default(string), string precisionCode = default(string), string sourceDictionary = default(string), FieldsMatching matching = default(FieldsMatching), GeoPos geometry = default(GeoPos), GeocodeAddress address = default(GeocodeAddress), List <CandidateRange> ranges = default(List <CandidateRange>))
 {
     this.PrecisionLevel           = precisionLevel;
     this.FormattedStreetAddress   = formattedStreetAddress;
     this.FormattedLocationAddress = formattedLocationAddress;
     this.Identifier       = identifier;
     this.PrecisionCode    = precisionCode;
     this.SourceDictionary = sourceDictionary;
     this.Matching         = matching;
     this.Geometry         = geometry;
     this.Address          = address;
     this.Ranges           = ranges;
 }