Используем пользовательский JsonConverter для преобразования моего объекта JSON. Это достигается с помощью атрибута JsonConverter для объекта IQuery ниже
[JsonConverter(typeof(CustomConverter<IQuery>))]
public interface IQuery
{
}
Пользовательский общий класс ниже (некоторые бит удалены для краткости)
public class CustomConverter<T> : JsonConverter
{
    // This should be created via AutoFac
    public ICustomObjectCreator<T> ObjectCreator { get; set; }
    // This default constructr always gets called
    public CustomConverter() {}
    // I want to call this constructor
    [JsonConstructor]
    public CustomConverter(ICustomObjectCreator<T> objectCreator)
    {
        Context = context;
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == JsonToken.Null)
            return null;
        // Load JObject from stream 
        var jObject = JObject.Load(reader);
        // Create target object based on JObject 
        var target = Create(objectType, jObject);
        // Populate the object properties 
        serializer.Populate(jObject.CreateReader(), target);
        return target;
    }
    protected T Create(Type objectType, JObject jObject)
    {
        var type = jObject.GetValue("type", StringComparison.OrdinalIgnoreCase)?.Value<string>();
        return ObjectCreator.Create(type);
    }
}
Интерфейс ICustomObjectConverter прост
public interface ICustomObjectCreator<out T>
{
    T Create(string type);
}
и одна из его реализации
public class QueryObjectCreator : ICustomObjectCreator<IQuery>
{
    public IQuery Create(string type)
    {
        // ... some logic to create a concrete object
        return (IQuery)concreteObject;
    }
}
Наконец, Autofac подключен для соблюдения вышеперечисленных
builder.RegisterType<QueryObjectCreator>()
       .As<ICustomObjectCreator<IQuery>>()
       .InstancePerLifetimeScope();
Проблемы:
- Когда вызывается CustomJsonConverter, вызывается только его конструктор по умолчанию. JsonConstructor НИКОГДА не вызван.
- Если я удалю конструктор по умолчанию, тогда весь JsonConverter НИКОГДА не будет вызван!
У меня есть inklinkg, что AutoFac никогда не вызывается при вызове JsonConverter. Я даже попробовал вложение свойств, чтобы построить QueryObjectConstruct явно, но даже это никогда не вызывается. Как я могу заставить его работать так, чтобы мой QueryObjectCretor вводился через DI?
Я нашел эту статью о дезадаптации зависимостей и десериализации JSON.net. Однако, для ручного разрешения с помощью вызова DeserializeObject < > (), как я могу, если он работает, заставить его работать с атрибутом JsonConverter?
Спасибо
