2015-11-20 21 views
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屬性爲真。我在這裏感到茫然,有什麼想法?

+2

您錯過了一些關鍵細節。 JSON的外觀是什麼,Item和TransformMatrix的定義是什麼樣子?根據您提供的信息,我無法再現問題。帶有JSON和類/結構定義的基本程序在TransformMatrixConverter中遇到了異常。小提琴:https://dotnetfiddle.net/IEexiW –

+0

您是否確認過Json.NET實際上已將'typeof(TransformMatrix)'傳遞給'CanConvert(type)'?或者你只是驗證1)它被調用,並且2)當用'typeof(TransformMatrix)'手動調用時它返回'true'? – dbc

+0

@BrianRogers啊,謝謝!你讓我回過頭來看看有問題的另一部分代碼!我想我現在解決了它 - 我認爲我正在反序列化的TransformMatrix只是一個只讀屬性。 – user1846231

回答

1

我覺得我和Brian的幫助下解決了這個問題,這個問題是無關上面的代碼 - 我想我是反序列化TransformMatrix只是一個只讀屬性。我使用的解決方案是揭示解串器可以編寫的另一個屬性。

相關問題