【发布时间】:2013-09-04 06:40:13
【问题描述】:
我有一个用 C# 定义的枚举,我将它的值存储为字符,如下所示:
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; }
}
}
我确定我做错了,但找不到有关如何为单个字段执行此操作的文档...
我错过了什么?
【问题讨论】:
-
您能否发布一个具有
CardType属性的示例类,其中反序列化失败? -
你能发布完整的枚举吗?我相信你不能像上面定义的那样声明枚举
-
被反序列化的类只有一个 CardType 属性来接收反序列化的值,除了声明之外没有任何内容。至于枚举值,这确实是ENUM的完整定义。 Card 类有一个 CardType 类型的属性,用于存储枚举类型值。
-
我收到此枚举的编译错误...这是在 java 中吗??
-
对不起,这是 C#,我应该在描述中指定会更新,对此感到抱歉
标签: c# json json.net enumeration json-deserialization