When serializing an object, I have a List<T> property where T is an abstract type which I'd like to serialize naturally. However, when deserializing the object, I want/need to manually deserialize this abstract list. I'm doing the latter part with a custom JsonConverter which looks at a property on each item 
in the list and then deserializes it to the correct type and puts it in the list.
But I also need to deserialize the rest of the object, without doing it property-by-property. Pseudo-code follows.
MyObject
class MyObject {
    public Guid Id;
    public string Name;
    public List<MyAbstractType> Things;
}
MyObjectConverter
class MyObjectConverter : JsonConverter {
    public override object ReadJson(reader, ..., serializer) {
        // Line below will fail because the serializer will attempt to deserlalize the list property.
        var instance = serializer.Deserialize(reader);
        var rawJson = JObject.Load(reader); // Ignore reading from an already-read reader.
        // Now loop-over and deserialize each thing in the list/array.
        foreach (var item in rawJson.Value<JArray>(nameof(MyObject.Things))) {
            var type = item.Value<string>(nameof(MyAbstractType.Type));
            MyAbstractType thing;
            // Create the proper type.
            if (type == ThingTypes.A) {
                thing = item.ToObject(typeof(ConcreteTypeA));
            }   
            else if (type == ThingTypes.B) {
                thing = item.ToObject(typeof(ConcreteTypeB));
            }
            // Add the thing.
            instance.Things.Add(thing);
        }
        return instance;
    }
}
To recap, I want to manually handle the deserialization of Things, but allow them to naturally serialize.
