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)); }
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)); }