1
我想實現一個結構的自定義JsonConverter,但我有一個很難得到它的工作。我以前爲另一個類實現了一個自定義轉換器,而且這個轉換器完美無瑕,我認爲我爲這個做了同樣的事情,但是我的轉換器的ReadJson方法從來沒有被調用過。定製JsonConverter不叫ReadJson
這是類:
public class TransformMatrixConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return typeof(TransformMatrix).IsAssignableFrom(objectType);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
,下面將我如何使用它在我的項目類。你可以看到我的其他轉換器,它工作正常。
public static Item FromJSON(string json)
{
JsonConverter[] converters = { new LineConverter(), new TransformMatrixConverter() };
return JsonConvert.DeserializeObject<Item>(json, new JsonSerializerSettings()
{
Converters = converters
});
}
發生了什麼:我的轉換器的CanConvert方法被調用並在適當時正確返回true;然而,ReadJson方法從來沒有命中,我有一個斷點,並且該異常從不拋出。我已驗證轉換器的CanRead屬性爲真。我在這裏感到茫然,有什麼想法?
您錯過了一些關鍵細節。 JSON的外觀是什麼,Item和TransformMatrix的定義是什麼樣子?根據您提供的信息,我無法再現問題。帶有JSON和類/結構定義的基本程序在TransformMatrixConverter中遇到了異常。小提琴:https://dotnetfiddle.net/IEexiW –
您是否確認過Json.NET實際上已將'typeof(TransformMatrix)'傳遞給'CanConvert(type)'?或者你只是驗證1)它被調用,並且2)當用'typeof(TransformMatrix)'手動調用時它返回'true'? – dbc
@BrianRogers啊,謝謝!你讓我回過頭來看看有問題的另一部分代碼!我想我現在解決了它 - 我認爲我正在反序列化的TransformMatrix只是一個只讀屬性。 – user1846231