public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            // Manage the open and closing of the object.
            // Write APObject specific content (e.g., acls)
            // Call appropriate helpers to write common stuff.
            APObject obj = value as APObject;

            if (obj == null)
            {
                writer.WriteNull();
                return;
            }
            writer.StartObject();
            EntityParser.WriteJson(writer, obj, serializer);
            AclParser.WriteAcl(writer, obj, serializer);
            writer.WriteEndObject();
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            // Read the type of the object and create  a new instance.
            // Invoke a helper to populate the common fields for the entity
            // Parse the rest
            var json = JObject.ReadFrom(reader) as JObject;

            if (json == null || json.Type == JTokenType.Null)
            {
                return(null);
            }
            var instance = BuildNewInstance(json, objectType);

            EntityParser.ReadJson(instance, json, serializer);
            // The only field only available in ap object is acl.
            AclParser.ReadAcl(instance, json, serializer);
            // Read any type specific fields
            if (instance is APUser)
            {
                UserParser.ReadJson(instance as APUser, json);
            }
            return(instance);
        }