として、私は、私はこのように、それは文字などの値です保存していますC#ので定義された列挙、持っている:デシリアライズJSON文字列挙
public enum CardType
{
Artist = 'A',
Contemporary = 'C',
Historical = 'H',
Musician = 'M',
Sports = 'S',
Writer = 'W'
}
私はJSON.NETを使用してデシリアライズしようとしたが、入ってくるんだがJSONはこのように、CHAR値(文字列)の代わりに、列挙のint型の値を使用して書かれていた:
[{"CardType","A"},{"CardType", "C"}]
それは私が手動で列挙に文字を解析することを可能にするコンバータのいくつかの種類を定義することは可能です値?
私は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; }
}
}
私は私が間違ってこれをやったと確信しているが、トラブルのドキュメントを見つけることが生じています1つのフィールドでこれを行う方法について...
私は何が欠けていますか?
あなたはdeserilizationが失敗した 'CardType'プロパティを持つサンプルクラスを投稿することができますか? – nemesv
は完全なenumを投稿できます。上記で定義したようにenumを宣言できないと確信しています。 – dharam
デシリアライズされるクラスには、デシリアライズされた値を受け取るCardTypeプロパティがあります。宣言以外には何もありません。列挙型の値は、実際にはENUMの完全な定義です。 Cardクラスには、列挙型の値を格納するためのCardType型のプロパティがあります。 – SelAromDotNet