protected virtual BaseCriteria Visit(BaseCriteria criteria) { if (Object.ReferenceEquals(null, criteria)) { return(null); } if (criteria is Criteria) { return(VisitCriteria((Criteria)criteria)); } if (criteria is BinaryCriteria) { return(VisitBinary((BinaryCriteria)criteria)); } if (criteria is UnaryCriteria) { return(VisitUnary((UnaryCriteria)criteria)); } if (criteria is ValueCriteria) { return(VisitValue((ValueCriteria)criteria)); } if (criteria is ParamCriteria) { return(VisitParam((ParamCriteria)criteria)); } throw new Exception(String.Format("Unhandled criteria type: '{0}'", criteria.GetType().Name)); }
/// <summary> /// Visits the specified criteria. /// </summary> /// <param name="criteria">The criteria.</param> /// <returns></returns> /// <exception cref="Exception">Criteria type is unkown.</exception> protected virtual BaseCriteria Visit(BaseCriteria criteria) { if (criteria is null) { return(null); } if (criteria is Criteria crit) { return(VisitCriteria(crit)); } if (criteria is BinaryCriteria binary) { return(VisitBinary(binary)); } if (criteria is UnaryCriteria unary) { return(VisitUnary(unary)); } if (criteria is ValueCriteria value) { return(VisitValue(value)); } if (criteria is ParamCriteria prm) { return(VisitParam(prm)); } throw new InvalidProgramException(string.Format("Unhandled criteria type: '{0}'", criteria.GetType().Name)); }
private void ToJson(JsonWriter writer, BaseCriteria criteria, JsonSerializer serializer) { if (criteria is null || criteria.IsEmpty) { writer.WriteNull(); return; } if (criteria is ValueCriteria valueCriteria) { var value = valueCriteria.Value; if (value != null && value is IEnumerable && !(value is string)) { // make sure that first value in array won't be recognized as a operator // while deserializing (e.g. if values are [">", "a", "b"], serialize them // as [[">", "a", "b"]] so that the first > won't be recognized as GE operator. writer.WriteStartArray(); serializer.Serialize(writer, value); writer.WriteEndArray(); return; } serializer.Serialize(writer, value); return; } if (criteria is ParamCriteria prm) { writer.WriteStartArray(); serializer.Serialize(writer, prm.Name); writer.WriteEndArray(); return; } if (criteria is Criteria crit) { writer.WriteStartArray(); serializer.Serialize(writer, crit.Expression); writer.WriteEndArray(); return; } if (criteria is UnaryCriteria unary) { writer.WriteStartArray(); writer.WriteValue(OperatorToKey[(int)unary.Operator]); ToJson(writer, unary.Operand, serializer); writer.WriteEndArray(); return; } if (criteria is BinaryCriteria binary) { writer.WriteStartArray(); ToJson(writer, binary.LeftOperand, serializer); writer.WriteValue(OperatorToKey[(int)binary.Operator]); ToJson(writer, binary.RightOperand, serializer); writer.WriteEndArray(); return; } throw new JsonSerializationException(string.Format("Can't serialize criteria of type {0}", criteria.GetType().FullName)); }