Esempio n. 1
0
        private void ValidateFloat(JsonSchemaModel schema)
        {
            if (schema == null)
            {
                return;
            }

            if (!TestType(schema, JsonSchemaType.Float))
            {
                return;
            }

            ValidateInEnumAndNotDisallowed(schema);

            double value = Convert.ToDouble(_reader.Value, CultureInfo.InvariantCulture);

            if (schema.Maximum != null)
            {
                if (value > schema.Maximum)
                {
                    RaiseError("Float {0} exceeds maximum value of {1}.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.Maximum), schema);
                }
                if (schema.ExclusiveMaximum && value == schema.Maximum)
                {
                    RaiseError("Float {0} equals maximum value of {1} and exclusive maximum is true.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.Maximum), schema);
                }
            }

            if (schema.Minimum != null)
            {
                if (value < schema.Minimum)
                {
                    RaiseError("Float {0} is less than minimum value of {1}.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.Minimum), schema);
                }
                if (schema.ExclusiveMinimum && value == schema.Minimum)
                {
                    RaiseError("Float {0} equals minimum value of {1} and exclusive minimum is true.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.Minimum), schema);
                }
            }

            if (schema.DivisibleBy != null && !IsZero(value % schema.DivisibleBy.Value))
            {
                RaiseError("Float {0} is not evenly divisible by {1}.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.DivisibleBy), schema);
            }
        }
Esempio n. 2
0
 /// <summary>
 /// Writes a <see cref="TimeSpan"/> value.
 /// </summary>
 /// <param name="value">The <see cref="TimeSpan"/> value to write.</param>
 public override void WriteValue(TimeSpan value)
 {
     InternalWriteValue(JsonToken.String);
     WriteValueInternal(JsonConvert.ToString(value, _quoteChar), JsonToken.String);
 }
        private void ValidateInteger(JsonSchemaModel schema)
        {
            if (schema == null)
            {
                return;
            }

            if (!TestType(schema, JsonSchemaType.Integer))
            {
                return;
            }

            ValidateNotDisallowed(schema);

            object value = _reader.Value;

            if (schema.Maximum != null)
            {
                if (JValue.Compare(JTokenType.Integer, value, schema.Maximum) > 0)
                {
                    RaiseError("Integer {0} exceeds maximum value of {1}.".FormatWith(CultureInfo.InvariantCulture, value, schema.Maximum), schema);
                }
                if (schema.ExclusiveMaximum && JValue.Compare(JTokenType.Integer, value, schema.Maximum) == 0)
                {
                    RaiseError("Integer {0} equals maximum value of {1} and exclusive maximum is true.".FormatWith(CultureInfo.InvariantCulture, value, schema.Maximum), schema);
                }
            }

            if (schema.Minimum != null)
            {
                if (JValue.Compare(JTokenType.Integer, value, schema.Minimum) < 0)
                {
                    RaiseError("Integer {0} is less than minimum value of {1}.".FormatWith(CultureInfo.InvariantCulture, value, schema.Minimum), schema);
                }
                if (schema.ExclusiveMinimum && JValue.Compare(JTokenType.Integer, value, schema.Minimum) == 0)
                {
                    RaiseError("Integer {0} equals minimum value of {1} and exclusive minimum is true.".FormatWith(CultureInfo.InvariantCulture, value, schema.Minimum), schema);
                }
            }

            if (schema.DivisibleBy != null)
            {
                bool notDivisible;
                if (value is BigInteger)
                {
                    // not that this will lose any decimal point on DivisibleBy
                    // so manually raise an error if DivisibleBy is not an integer and value is not zero
                    BigInteger i = (BigInteger)value;
                    bool       divisibleNonInteger = !Math.Abs(schema.DivisibleBy.Value - Math.Truncate(schema.DivisibleBy.Value)).Equals(0);
                    if (divisibleNonInteger)
                    {
                        notDivisible = i != 0;
                    }
                    else
                    {
                        notDivisible = i % new BigInteger(schema.DivisibleBy.Value) != 0;
                    }
                }
                else
                {
                    notDivisible = !IsZero(Convert.ToInt64(value, CultureInfo.InvariantCulture) % schema.DivisibleBy.Value);
                }

                if (notDivisible)
                {
                    RaiseError("Integer {0} is not evenly divisible by {1}.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.DivisibleBy), schema);
                }
            }
        }
Esempio n. 4
0
 /// <summary>
 /// Writes a <see cref="Decimal"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Decimal"/> value to write.</param>
 public override void WriteValue(decimal value)
 {
     InternalWriteValue(JsonToken.Float);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.Float);
 }
Esempio n. 5
0
 /// <summary>
 /// Writes a <see cref="DateTimeOffset"/> value.
 /// </summary>
 /// <param name="value">The <see cref="DateTimeOffset"/> value to write.</param>
 public override void WriteValue(DateTimeOffset value)
 {
     InternalWriteValue(JsonToken.Date);
     WriteValueInternal(JsonConvert.ToString(value, DateFormatHandling, _quoteChar), JsonToken.Date);
 }
Esempio n. 6
0
 /// <summary>
 /// Writes a <see cref="Char"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Char"/> value to write.</param>
 public override void WriteValue(char value)
 {
     InternalWriteValue(JsonToken.String);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.String);
 }
Esempio n. 7
0
 public override void WriteValue(sbyte value)
 {
     InternalWriteValue(JsonToken.Integer);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
 }
Esempio n. 8
0
        private void ValidateFloat(JsonSchemaModel schema)
        {
            if (schema == null)
            {
                return;
            }

            if (!TestType(schema, JsonSchemaType.Float))
            {
                return;
            }

            ValidateInEnumAndNotDisallowed(schema);

            double value = Convert.ToDouble(_reader.Value);

            if (schema.Maximum != null && value > schema.Maximum)
            {
                RaiseError("Float {0} exceeds maximum value of {1}.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.Maximum), schema);
            }

            if (schema.Minimum != null && value < schema.Minimum)
            {
                RaiseError("Float {0} is less than minimum value of {1}.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.Minimum), schema);
            }

            if (schema.MaximumDecimals != null && MathUtils.GetDecimalPlaces(value) > schema.MaximumDecimals)
            {
                RaiseError("Float {0} exceeds the maximum allowed number decimal places of {1}.".FormatWith(CultureInfo.InvariantCulture, JsonConvert.ToString(value), schema.MaximumDecimals), schema);
            }
        }
Esempio n. 9
0
 /// <summary>
 /// Writes a <see cref="Boolean"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Boolean"/> value to write.</param>
 public override void WriteValue(bool value)
 {
     InternalWriteValue(JsonToken.Boolean);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.Boolean);
 }
 /// <summary>
 /// Writes a <see cref="Uri"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Uri"/> value to write.</param>
 public override void WriteValue(Uri value)
 {
     base.WriteValue(value);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.Date);
 }
 /// <summary>
 /// Writes a <see cref="Guid"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Guid"/> value to write.</param>
 public override void WriteValue(SerializableGuid value)
 {
     base.WriteValue(value);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.String);
 }
 /// <summary>
 /// Writes a <see cref="Char"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Char"/> value to write.</param>
 public override void WriteValue(char value)
 {
     base.WriteValue(value);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.Integer);
 }
 /// <summary>
 /// Writes a <see cref="Double"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Double"/> value to write.</param>
 public override void WriteValue(double value)
 {
     base.WriteValue(value);
     WriteValueInternal(JsonConvert.ToString(value), JsonToken.Float);
 }
Esempio n. 14
0
 /// <summary>
 /// Writes a <see cref="Double"/> value.
 /// </summary>
 /// <param name="value">The <see cref="Double"/> value to write.</param>
 public override void WriteValue(double value)
 {
     InternalWriteValue(JsonToken.Float);
     WriteValueInternal(JsonConvert.ToString(value, FloatFormatHandling, QuoteChar, false), JsonToken.Float);
 }