我创建了一个自定义JsonConverter
来将属性"Type" : "A"
(或" D"," E"等)转换为枚举包含Article
,Disambuigation
等。以下是转换器类中的相关代码:
public override bool CanConvert(Type objectType) => objectType == typeof(SearchResultType);
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var jsonObject = JObject.Load(reader);
var typeProperty = jsonObject.Properties().FirstOrDefault(p => p.Name == "Type");
switch ((string)typeProperty.Value)
{
case "A": return SearchResultType.Article;
default: return SearchResultType.None;
}
}
我的问题是它总是抛出一条带有消息的异常:
从JsonReader读取JObject时出错。当前的JsonReader项不是对象:String。
我理解这意味着它期望类似"Name" : "Hello world!"
但得到"Name" : 123
。但是,我确信它无法解析的属性是字符串。我的转换器有问题吗?
答案 0 :(得分:0)
是的,您的转换器存在问题。您的转换器旨在从JSON读取字符串值以将其转换为枚举值。字符串值不是JSON中的对象,因此您无法将其加载到JObject
中。相反,您可以直接从阅读器获取字符串值:
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var type = (string)reader.Value;
switch (type)
{
case "A": return SearchResultType.Article;
case "D": return SearchResultType.Disambuigation;
...
default: return SearchResultType.None;
}
}