我有一個枚舉用C#,在那裏我存儲它的值字符,這樣定義JSON是使用CHAR值(字符串),而不是枚舉的int值寫的,就像這樣:反序列化JSON字符作爲枚舉
[{"CardType","A"},{"CardType", "C"}]
是否有可能定義某種轉換器的,讓我爲char手動解析到枚舉值?
我試着創建一個JsonConverter,但不知道如何去做,而只將它應用到這個屬性,而不是整個解析對象。這裏是我的嘗試:
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));
}
}
的邏輯可能是錯誤的,我可以解決這個問題,但問題是ReadJson()不會被調用的。
CanConvert是,但它似乎被調用每個屬性,而不僅僅是一個屬性我定義它:
public class Card
{
private CardType type;
[JsonConverter(typeof(EnumerationConverter))]
public CardType Type
{
get { return type; }
set { type = value; }
}
}
我敢肯定,我已經做了這個錯誤,但我無法找到文件關於如何爲單個字段執行此操作...
我錯過了什麼?
您可以發佈具有在deserilization失敗'CardType'屬性的示例類? – nemesv
可以發佈完整的枚舉。我相信你不能聲明enum,因爲你已經定義了 – dharam
以上的類被反序列化成只是有一個CardType屬性來接收反序列化的值,除了聲明之外沒有其他的東西。至於枚舉值,這確實是ENUM的完整定義。 Card類具有用於存儲枚舉類型值的CardType類型的屬性。 – SelAromDotNet