0
我正在創建一個自定義JsonConverter
以將屬性"Type" : "A"
(或「D」,「E」等)轉換爲包含Article
,Disambuigation
等的枚舉。下面是轉換器類中的相關代碼:自定義JsonReader引發當前JsonReader項目不是對象:String。所有對象
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
。但是,我知道它無法解析的屬性是字符串。我的轉換器有問題嗎?
我明白了。因此,對被解析的對象中的每個值調用ReadJson(),是否正確? –
不支持。只有匹配轉換器可以處理的類型的值纔會調用ReadJson。由於反序列化器正在解析JSON,因此它看到有一個名爲'Type'的屬性。在你的目標類中有一個匹配的'Type'屬性。該屬性具有一種「SearchResultType」類型。所以Json.Net調用'CanConvert'來查看你的轉換器是否可以處理'SearchResultType'。如果它返回true,那麼調用'ReadJson',讀取器位於JSON中'Type'屬性的值處。這個值是你的情況下的一個字符串,所以這是你的轉換器需要處理的。 –
對。我的不好,我忘了指定每個CanConvert返回true的值。感謝您的解釋! –