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