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
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser le contrat personnalisé de résolution. Défaut de contrat de résolution utilise des convertisseurs de paramètres uniquement si le convertisseur n'est pas spécifié pour le type.
Utilisation: