private bool CheckForCircularReference(object value, ReferenceLoopHandling? referenceLoopHandling, JsonContract contract)
		{
			if (value == null || contract is JsonPrimitiveContract)
				return true;

			if (SerializeStack.IndexOf(value) != -1)
			{
				var selfRef = (value is Vector2 || value is Vector3 || value is Vector4 || value is Color || value is Color32)
					? ReferenceLoopHandling.Ignore
					: referenceLoopHandling.GetValueOrDefault(Serializer.ReferenceLoopHandling);
				switch (selfRef)
				{
					case ReferenceLoopHandling.Error:
						throw new JsonSerializationException("Self referencing loop detected for type '{0}'.".FormatWith(CultureInfo.InvariantCulture, value.GetType()));
					case ReferenceLoopHandling.Ignore:
						return false;
					case ReferenceLoopHandling.Serialize:
						return true;
					default:
						throw new InvalidOperationException("Unexpected ReferenceLoopHandling value: '{0}'".FormatWith(CultureInfo.InvariantCulture, Serializer.ReferenceLoopHandling));
				}
			}

			return true;
		}
        private bool CheckForCircularReference(object value, ReferenceLoopHandling? referenceLoopHandling, JsonContract contract)
        {
            if (value == null || contract is JsonPrimitiveContract)
            return true;

              if (SerializeStack.IndexOf(value) != -1)
              {
            switch (referenceLoopHandling.GetValueOrDefault(Serializer.ReferenceLoopHandling))
            {
              case ReferenceLoopHandling.Error:
            throw new JsonSerializationException("Self referencing loop");
              case ReferenceLoopHandling.Ignore:
            return false;
              case ReferenceLoopHandling.Serialize:
            return true;
              default:
            throw new InvalidOperationException("Unexpected ReferenceLoopHandling value: '{0}'".FormatWith(CultureInfo.InvariantCulture, Serializer.ReferenceLoopHandling));
            }
              }

              return true;
        }