mam wyliczenie zdefiniowane w C#, gdzie jestem przechowującej to wartości jak bohaterów, tak:Cofnięcie json charakter jako wyliczenie
public enum CardType
{
Artist = 'A',
Contemporary = 'C',
Historical = 'H',
Musician = 'M',
Sports = 'S',
Writer = 'W'
}
Ja próbuje deserializowania użyciu Json.NET, ale przychodzącego JSON został napisany przy użyciu wartości cHAR (string) zamiast wartości iNT wyliczenia, tak:
[{"CardType","A"},{"CardType", "C"}]
Czy to możliwe, aby zdefiniować jakiś konwerter który pozwoli mi ręcznie analizowania char do wyliczenia wartość?
Próbowałem utworzyć JsonConverter, ale nie jestem pewien jak to zrobić, stosując go tylko do tej właściwości, a nie do całego analizowanego obiektu. oto co próbowałem:
public class EnumerationConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
serializer.Serialize(writer, value);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return null;
}
int value = serializer.Deserialize<int>(reader);
return (CardType)value;
}
public override bool CanConvert(Type objectType)
{
return objectType.IsSubclassOf(typeof(string));
}
}
logika może być źle i mogę to naprawić, ale problem jest ReadJson() nie jest wywoływana w ogóle.
CanConvert jest, ale wydaje się być wywołana dla każdej nieruchomości, a nie tylko jedną właściwość zdefiniowałem go:
public class Card
{
private CardType type;
[JsonConverter(typeof(EnumerationConverter))]
public CardType Type
{
get { return type; }
set { type = value; }
}
}
Jestem pewien, że zrobiłem to nieprawidłowo, ale mam problem ze znalezieniem dokumentacji jak to zrobić dla pojedynczego pola ...
Czego mi brakuje?
można umieścić klasy próbki, która ma właściwość 'CardType' gdzie deserilization powiedzie? – nemesv
można opublikować pełne wyliczenie. Jestem pewien, że nie można zadeklarować wyliczenia, jak zdefiniowałeś powyżej – dharam
, gdy klasa jest deserializowana, ma tylko właściwość CardType, aby odebrać przekształconą wartość, nie ma tam niczego poza deklaracją. Jeśli chodzi o wartość wyliczeniową, jest to rzeczywiście pełna definicja ENUM. klasa Card ma właściwość typu CardType do przechowywania wyliczonej wartości typu. – SelAromDotNet