我有一个枚举:
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 实际执行从枚举值的名称到我指定替换该值的字符串的转换?
谢谢!