Json.NET comment remplacer la sérialisation pour un type qui définit un JsonConverter personnalisé via un attribut?

Je suis en train de désérialiser une classe à l'aide Json.NET et une coutume JsonConverter objet. La classe définit actuellement un convertisseur de sérialisation par défaut à l'aide de la JsonConverterAttribute. J'ai besoin de faire une coutume de la désérialisation en passant par un convertisseur personnalisé. Cependant, la désérialisation semble toujours être à l'aide de la valeur par défaut du convertisseur. Comment puis-je obtenir Json.NET préférer mon convertisseur personnalisé?

Voici un peu de code exemple qui illustre le problème. Je suis en utilisant NewtonSoft.Json français 4.5.11:

void Main()
{
    JsonConvert.DeserializeObject<Foo>("{}"); //throws "in the default converter"
    var settings = new JsonSerializerSettings { Converters = new[] { new CustomConverter() } };
    JsonConvert.DeserializeObject<Foo>("{}", settings); //still throws "in the default converter" :-/
}

[JsonConverter(typeof(DefaultConverter))]
public class Foo {
}

public class DefaultConverter : JsonConverter {
    public override bool CanConvert(Type objectType)
    {
        return typeof(Foo).IsAssignableFrom(objectType);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new Exception("in the default converter!");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new Exception("in the default converter!");
    }
}

public class CustomConverter : JsonConverter {
    public override bool CanConvert(Type objectType)
    {
        return typeof(Foo).IsAssignableFrom(objectType);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new Exception("in the custom converter!");
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new Exception("in the custom converter!");
    }
}

source d'informationauteur ChaseMedallion