public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { while (reader.TokenType != JsonToken.StartObject) { reader.Read(); } reader.Read(); var op = reader.Value.ToString(); // reader.Read(); switch (op) { case "and": case "or": reader.Read(); var combined = new CombinedFilterExpression { Operator = (CombinationOperator)Enum.Parse(typeof(CombinationOperator), char.ToUpper(op[0]) + op.Substring(1)) }; var combineitem = ProcessCombinedExpression(combined, reader, serializer); return(combineitem); default: var comparison = new ComparisonFilterExpression { Operator = GetComparison(op) }; var compareitem = ProcessComparisonFilter(comparison, reader, serializer); return(compareitem); } }
private CombinedFilterExpression ProcessCombinedExpression(CombinedFilterExpression expression, JsonReader reader, JsonSerializer serializer) { reader.Read(); // Start Array var list = new List <FilterExpression>(); while (reader.TokenType != JsonToken.EndArray) { var filter = serializer.Deserialize <FilterExpression>(reader); list.Add(filter); if (reader.TokenType == JsonToken.EndObject) { reader.Read(); } } expression.Filters = list.ToArray(); while (reader.TokenType != JsonToken.EndObject) { reader.Read(); //End Array } return(expression); }