我有一个枚举:
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);
}
}
回到类的属性中,我这样将属性放在动物上:
[JsonProperty("animal")]
[JsonConverter(typeof(AnimalConverter))]
public Animal ZooAnimals { get; set; }
当我运行程序时,它似乎完全忽略了JsonConverter,而不是看到预期的值,例如"black_bear"或"dog",我看到了"BlackBear"和"Dog"。我该如何让JsonConverter实际执行从枚举值名称到我指定的字符串的转换,并替换该值?谢谢!
Animal
和Animals
,能否澄清一下这两个都是指你的枚举?值得一提的是,我使用以下代码片段使你的代码工作正常:Zoo zoo = new Zoo { ZooAnimals = Animal.Cat }; string json = JsonConvert.SerializeObject(zoo);
- robyaw