Atributo JsonConverter: desserialize usando o construtor personalizado e o Autofac

Estou usando um JsonConverter personalizado para converter meu objeto JSON. Isso é obtido através do atributo JsonConverter no objeto IQuery abaixo

[JsonConverter(typeof(CustomConverter<IQuery>))]
public interface IQuery
{
}

A classe genérica personalizada está abaixo (alguns bits foram removidos por questões de brevidade)

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);
    }
}

A interface ICustomObjectConverter é simples

public interface ICustomObjectCreator<out T>
{
    T Create(string type);
}

e uma de sua implementação

public class QueryObjectCreator : ICustomObjectCreator<IQuery>
{
    public IQuery Create(string type)
    {
        // ... some logic to create a concrete object
        return (IQuery)concreteObject;
    }
}

Por fim, o Autofac está conectado para honrar os

builder.RegisterType<QueryObjectCreator>()
       .As<ICustomObjectCreator<IQuery>>()
       .InstancePerLifetimeScope();

Problemas:

Quando CustomJsonConverter é chamado, apenas seu construtor padrão é chamado. O JsonConstructor NUNCA é chamado.Se eu remover o construtor padrão, o JsonConverter inteiro nunca será chamado!

Eu tenho um inklinkg que o AutoFac nunca está sendo chamado quando o JsonConverter está sendo chamado. Eu até tentei injeção de propriedade para construir QueryObjectConstruct explicitamente, mas mesmo isso nunca é chamado. Como posso fazê-lo funcionar para que meu QueryObjectCretor seja injetado via DI?

eu encontreiesta artigo sobre Injeção de dependência e desserialização JSON.net. No entanto, isso é para resolução manual usando a chamada DeserializeObject <> (), como posso, se funcionar, fazê-lo funcionar com o atributo JsonConverter?

obrigado

questionAnswers(2)

yourAnswerToTheQuestion