CustomCreationConverter<T>
Creates a custom object.
            
                using Newtonsoft.Json.Utilities;
using System;
namespace Newtonsoft.Json.Converters
{
    public abstract class CustomCreationConverter<T> : JsonConverter
    {
        public override bool CanWrite => false;
        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            throw new NotSupportedException("CustomCreationConverter should only be used while deserializing.");
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            if (reader.TokenType == JsonToken.Null)
                return null;
            T val = Create(objectType);
            if (val == null)
                throw new JsonSerializationException("No object created.");
            serializer.Populate(reader, val);
            return val;
        }
        public abstract T Create(Type objectType);
        public override bool CanConvert(Type objectType)
        {
            return typeof(T).IsAssignableFrom(objectType);
        }
    }
}