Example #1
0
        internal static bool EqualsWithStringCoercion(JsonElement value, JsonElement queryValue)
        {
            if (value.Equals(queryValue))
            {
                return(true);
            }

            // Handle comparing an integer with a float
            // e.g. Comparing 1 and 1.0
            if (value.ValueKind == JsonValueKind.Number && queryValue.ValueKind == JsonValueKind.Number)
            {
                return(value.GetDouble() == queryValue.GetDouble());
            }

            if (queryValue.ValueKind != JsonValueKind.String)
            {
                return(false);
            }

            return(string.Equals(value.ToString(), queryValue.GetString(), StringComparison.Ordinal));
        }
Example #2
0
        internal static bool EqualsWithStrictMatch(JsonElement value, JsonElement queryValue)
        {
            // we handle floats and integers the exact same way, so they are pseudo equivalent
            if (value.ValueKind != queryValue.ValueKind)
            {
                return(false);
            }

            // Handle comparing an integer with a float
            // e.g. Comparing 1 and 1.0
            if (value.ValueKind == JsonValueKind.Number && queryValue.ValueKind == JsonValueKind.Number)
            {
                return(value.GetDouble() == queryValue.GetDouble());
            }

            if (value.ValueKind == JsonValueKind.String && queryValue.ValueKind == JsonValueKind.String)
            {
                return(value.GetString() == queryValue.GetString());
            }

            if (value.ValueKind == JsonValueKind.Null && queryValue.ValueKind == JsonValueKind.Null)
            {
                return(true);
            }

            if (value.ValueKind == JsonValueKind.Undefined && queryValue.ValueKind == JsonValueKind.Undefined)
            {
                return(true);
            }

            if ((value.ValueKind == JsonValueKind.False || value.ValueKind == JsonValueKind.True) &&
                (queryValue.ValueKind == JsonValueKind.False || queryValue.ValueKind == JsonValueKind.True))
            {
                return(value.GetBoolean() == queryValue.GetBoolean());
            }

            return(value.Equals(queryValue));
        }