public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            object result = null;

            if (objectType.IsGenericType)
            {
                var genericType          = objectType.GetGenericTypeDefinition();
                var expressionSerializer = new Serialize.Linq.Serializers.JsonSerializer();

                if (genericType == typeof(FilterHandle <>))
                {
                    JObject jObject        = JObject.Load(reader);
                    var     expressionJson = jObject.First.First.ToString();
                    var     expressionNode = expressionSerializer.Deserialize <ExpressionNode>(expressionJson);
                    var     expression     = expressionNode.ToBooleanExpression <T>();
                    result = new FilterHandle <T>(expression);
                }
                else if (genericType == typeof(NavigationPropertiesHandle <>))
                {
                    JObject jObject           = JObject.Load(reader);
                    var     expressionObjects = jObject.First.First;
                    Expression <Func <T, object> >[] expressionArray = new Expression <Func <T, object> > [expressionObjects.Count()];
                    int index = 0;

                    foreach (var expressionToken in expressionObjects)
                    {
                        var expressionJson = expressionToken.First.First.ToString();
                        var expressionNode = expressionSerializer.Deserialize <ExpressionNode>(expressionJson);
                        var expression     = expressionNode.ToExpression <Func <T, object> >();
                        expressionArray[index] = expression;
                        index++;
                    }

                    result = new NavigationPropertiesHandle <T>(expressionArray);
                }
            }

            return(result);
        }