	{
			_rateableOnlyIfOrdered = null;
			_hasRateableOnlyIfOrdered = false;
		}

		#endregion // RateableOnlyIfOrdered

		#region References
		private Reference[] _references;
		private bool _hasReferences;

		/// <summary>
		///     References defines cross-product references, e.g. alternatives
		///     or follow-up products.
		/// </summary>
		public Reference[] References
		{
			get => _references;
			set
			{
				_references = value;
				_hasReferences = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetReferences()
		{
			_references = null;
			_hasReferences = false;
		}

		#endregion // References

		#region Safetysheet
		private string _safetysheet;
		private bool _hasSafetysheet;

		/// <summary>
		///     Safetysheet is the name of an safetysheet file (in the media
		///     files) or a URL to the safetysheet on the internet.
		/// </summary>
		public string Safetysheet
		{
			get => _safetysheet;
			set
			{
				_safetysheet = value;
				_hasSafetysheet = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetSafetysheet()
		{
			_safetysheet = null;
			_hasSafetysheet = false;
		}

		#endregion // Safetysheet

		#region ScalePrices
		private ScalePrice[] _scalePrices;
		private bool _hasScalePrices;

		/// <summary>
		///     ScalePrices can be used when the price of the product is
		///     dependent on the ordered quantity.
		/// </summary>
		public ScalePrice[] ScalePrices
		{
			get => _scalePrices;
			set
			{
				_scalePrices = value;
				_hasScalePrices = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetScalePrices()
		{
			_scalePrices = null;
			_hasScalePrices = false;
		}

		#endregion // ScalePrices

		#region Service
		private bool? _service;
		private bool _hasService;

		/// <summary>
		///     Service indicates if the is a good (false) or a service (true).
		///     The default value is false.
		/// </summary>
		public bool? Service
		{
			get => _service;
			set
			{
				_service = value;
				_hasService = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetService()
		{
			_service = null;
			_hasService = false;
		}

		#endregion // Service

		#region TaxCode
		private string _taxCode;
		private bool _hasTaxCode;

		/// <summary>
		///     TaxCode to use for this product. This is typically
		///     project-specific.
		/// </summary>
		public string TaxCode
		{
			get => _taxCode;
			set
			{
				_taxCode = value;
				_hasTaxCode = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetTaxCode()
		{
			_taxCode = null;
			_hasTaxCode = false;
		}

		#endregion // TaxCode

		#region TaxRate
		private double? _taxRate;
		private bool _hasTaxRate;

		/// <summary>
		///     TaxRate for this product, a numeric value between 0.0 and 1.0.
		/// </summary>
		public double? TaxRate
		{
			get => _taxRate;
			set
			{
				_taxRate = value;
				_hasTaxRate = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetTaxRate()
		{
			_taxRate = null;
			_hasTaxRate = false;
		}

		#endregion // TaxRate

		#region Thumbnail
		private string _thumbnail;
		private bool _hasThumbnail;

		/// <summary>
		///     Thumbnail is the name of an thumbnail image file (in the media
		///     files) or a URL to the image on the internet.
		/// </summary>
		public string Thumbnail
		{
			get => _thumbnail;
			set
			{
				_thumbnail = value;
				_hasThumbnail = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetThumbnail()
		{
			_thumbnail = null;
			_hasThumbnail = false;
		}

		#endregion // Thumbnail

		#region Unspscs
		private Unspsc[] _unspscs;
		private bool _hasUnspscs;

		/// <summary>
		///     Unspscs is a list of UNSPSC categories the product belongs to.
		/// </summary>
		public Unspsc[] Unspscs
		{
			get => _unspscs;
			set
			{
				_unspscs = value;
				_hasUnspscs = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetUnspscs()
		{
			_unspscs = null;
			_hasUnspscs = false;
		}

		#endregion // Unspscs

		#region Visible
		private bool? _visible;
		private bool _hasVisible;

		/// <summary>
		///     Visible is a flag that indicates whether this product will be
		///     visible to the end-user when shopping. Please consult your
		///     Store Manager before setting a value for this field.
		/// </summary>
		public bool? Visible
		{
			get => _visible;
			set
			{
				_visible = value;
				_hasVisible = true;
			}
		}

		/// <summary>
		///     Reset the property.
		/// </summary>
		public void ResetVisible()
		{
			_visible = null;
			_hasVisible = false;
		}

		#endregion // Visible

		/// <summary>
		///     Serialize the data.
		/// </summary>
		public virtual void GetObjectData(SerializationInfo info, StreamingContext context)
		{
			if (_hasAsin)
			{
				info.AddValue("asin", _asin);
			}
			if (_hasAutoConfigure)
			{
				info.AddValue("autoConfigure", _autoConfigure);
			}
			if (_hasAvailability)
			{
				info.AddValue("availability", _availability);
			}
			if (_hasBlobs)
			{
				info.AddValue("blobs", _blobs);
			}
			if (_hasBoostFactor)
			{
				info.AddValue("boostFactor", _boostFactor);
			}
			if (_hasBpn)
			{
				info.AddValue("bpn", _bpn);
			}
			if (_hasCatalogManaged)
			{
				info.AddValue("catalogManaged", _catalogManaged);
			}
			if (_hasCategories)
			{
				info.AddValue("categories", _categories);
			}
			if (_hasConditions)
			{
				info.AddValue("conditions", _conditions);
			}
			if (_hasContract)
			{
				info.AddValue("contract", _contract);
			}
			if (_hasContractItem)
			{
				info.AddValue("contractItem", _contractItem);
			}
			if (_hasConversionDenumerator)
			{
				info.AddValue("conversionDenumerator", _conversionDenumerator);
			}
			if (_hasConversionNumerator)
			{
				info.AddValue("conversionNumerator", _conversionNumerator);
			}
			if (_hasCountry)
		