を使用して適切にJSONに変換する列挙型を取得できません:は、私が列挙型を持っているJson.NET
public enum Animal
{
Dog,
Cat,
BlackBear
}
私は、サードパーティのAPIに送信する必要があります。このAPIでは、送信する列挙値が小文字で、必要に応じてアンダースコアが必要になることが必要です。一般的に、彼らが必要とする名前は、私が使用するenum命名規則と一致しません。 https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/に設けた例を使用して
が、私はカスタムJsonConverter使用しようとした:
[JsonProperty("animal")]
[JsonConverter(typeof(AnimalConverter))]
public Animal ZooAnimals { get; set; }
:クラスのプロパティの[戻る
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);
}
}
を、私はとても動物に属性を置きます
私はプログラムを実行すると、JsonConverterを完全に無視し、 "black_bear"や "dog"のような期待値を見るのではなく、 "BlackBear"と "Dog"を見ます。 JsonConverterを実際にenum値の名前から、その値を置き換える指定の文字列に変換するにはどうしたらよいですか?
ありがとうございます!
あなたは、短いが完全なプログラムを作ることはできますか?テストする小さなLINQPadプログラムを書いたので、ここでコンバータを使用します。 –
コードサンプルの 'Animal'と' Animals'を参照してください。これらの両方があなたの列挙を参照することを明確にすることはできますか?それは価値があるため、次のスニペットを使用してコードを動作させることができました。 'Zoo zoo = new Zoo {ZooAnimals = Animal.Cat};文字列json = JsonConvert.SerializeObject(zoo); ' – robyaw