У меня есть перечисление:
public enum Animal
{
Dog,
Cat,
BlackBear
}
Мне нужно отправить его в сторонний API. Этот API требует, чтобы значения перечисления, которые я отправляю, были строчными, а иногда требуют подчеркивания. В общем, имена, которые они требуют, не соответствуют используемому мной соглашению об именах перечислений.
Используя пример, приведенный в https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/, я попытался использовать пользовательский 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);
}
}
В свойствах класса я поместил атрибуты в Animal следующим образом:
[JsonProperty("animal")]
[JsonConverter(typeof(AnimalConverter))]
public Animal ZooAnimals { get; set; }
Когда я запускаю программу, она, кажется, полностью игнорирует JsonConverter и вместо того, чтобы видеть ожидаемые значения, такие как "black_bear" или "dog", я вижу "BlackBear" и "Dog". Как я могу заставить JsonConverter фактически выполнить преобразование из имени значения enum в строку, которую я указываю, чтобы заменить это значение на?
Спасибо!