public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var obj         = new MyClass();
        var jObj        = JObject.Load(reader);
        var stringsProp = jObj["MyStrings"];

        if (stringsProp != null)
        {
            var strings = stringsProp.ToObject <List <string> >();
            foreach (var s in strings)
            {
                obj.AddString(s);
            }
        }
        return(obj);
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        var obj  = new MyClass();
        var jObj = JObject.Load(reader);

        JsonConvert.PopulateObject(jObj.ToString(), obj);                       // populate fields we don't need any special handling for
        var stringsProp = jObj["MyStrings"];

        if (stringsProp != null)
        {
            var strings = stringsProp.ToObject <List <string> >();
            foreach (var s in strings)
            {
                obj.AddString(s);
            }
        }
        return(obj);
    }