protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
            {
                JsonProperty property = base.CreateProperty(member, memberSerialization);

                property.ShouldSerialize =
                    instance =>
                {
                    var entity = instance as ITrackable;
                    if (entity == null)
                    {
                        return(true);
                    }

                    EntityNavigationProperty np = entity
                                                  .GetNavigationProperties(false)
                                                  .FirstOrDefault(x => x.Property == member);
                    if (np == null)
                    {
                        return(true);                // not a nav prop
                    }
                    if (np.ValueIsNull)
                    {
                        return(false);                    // nav prop is not initialized
                    }
                    foreach (var rp in np.AsReferenceProperty())
                    {
                        // don't serialize unchanged reference navigation props
                        return(IncludeReferenceProp(entity, rp.Property));
                    }

                    // serialize collection navigation props
                    return(true);
                };

                // Inject the custom IValueProvider for entity collections which
                // returns only changed items
                property.ValueProvider = new CollectionValueProvider(this, member, property.ValueProvider);

                return(property);
            }