Ne pouvez pas obtenir enum pour convertir en json correctement à l'aide de Json.NET

J'ai un enum:

public enum Animal 
{ 
    Dog, 
    Cat, 
    BlackBear 
}

J'ai besoin de l'envoyer à un tiers de l'API. Cette API nécessite que les valeurs enum-je envoyer être en minuscules et nécessitent parfois des traits de soulignement. En général, les noms ils exigent de ne pas correspondre à la enum convention de nommage que j'utilise.

À l'aide de l'exemple fourni à https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/, j'ai essayé d'utiliser un JsonConverter:

public class AnimalConverter : JsonConverter {
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
        var animal = (Animal)value;
        switch (animal)
        {
            case Animal.Dog:
            {
                writer.WriteValue("dog");
                break;
            }
            case Animal.Cat:
            {
                writer.WriteValue("cat");
                break;
            }
            case Animal.BlackBear:
            {
                writer.WriteValue("black_bear");
                break;
            }
        }
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
        var enumString = (string)reader.Value;
        Animal? animal = null;
        switch (enumString)
        {
            case "cat":
            {
                animal = Animal.Cat;
                break;
            }
            case "dog":
            {
                animal = Animal.Dog;
                break;
            }
            case "black_bear":
            {
                animal = Animal.BlackBear;
                break;
            }
        }
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(string);
    }
}

De retour dans les propriétés d'une classe, j'ai mis les attributs de l'Animal que donc:

[JsonProperty("animal")]
[JsonConverter(typeof(AnimalConverter))]
public Animal ZooAnimals { get; set; }

Lorsque je lance le programme, cependant, il semble totalement ignorer la JsonConverter et plutôt que de voir les valeurs attendues comme "black_bear" ou "chien", je vois "BlackBear" et "Chien". Comment puis-je obtenir le JsonConverter à réellement faire la conversion à partir du nom de l'enum de la valeur à la chaîne je précise pour remplacer cette valeur avec?

Merci!

  • Pouvez-vous produire une courte mais complète du programme, comme par exemple pour LINQPad qui illustre le problème? J'ai écrit un petit LINQPad programme de test et qu'il utilise le convertisseur ici.
  • Vous vous référez à Animal et Animals dans l'exemple de code; pouvez-vous préciser ces deux reportez-vous à votre énumération? Pour ce que ça vaut, j'ai réussi à obtenir votre code de travail à l'aide de l'extrait de code suivant: Zoo zoo = new Zoo { ZooAnimals = Animal.Cat }; string json = JsonConvert.SerializeObject(zoo);
InformationsquelleAutor Xaniff | 2013-11-04