2015-04-13 17 views
18

Ho un grafico di oggetto complesso che sto serializzando/deserializzando con Json.NET. Alcuni oggetti derivano da una classe astratta, quindi per far funzionare correttamente la deserializzazione, avevo bisogno di creare un custom JsonConverter. Il suo unico ruolo è selezionare l'implementazione concreta appropriata della classe astratta al momento della deserializzazione e consentire a Json.NET di continuare il suo percorso.Come utilizzare la serializzazione predefinita in un JsonConverter personalizzato

Il problema si presenta quando desidero serializzare. Non ho bisogno di fare nulla di personalizzato. Voglio ottenere esattamente lo stesso comportamento che vorrei ottenere usando JsonConvert.SerializeObject senza personalizzato JsonConverter.

Tuttavia, poiché utilizzo la classe JSONConverter personalizzata per le mie esigenze di deserializzazione, sono costretto a fornire un'implementazione WriteJson. Dal momento che WriteJson è astratto, non posso semplicemente chiamare base.WriteJson, ma voglio essenzialmente farlo. Quindi la mia domanda è, che cosa inserisco in quel metodo per ottenere il comportamento normale, Jane? In altre parole:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
{ 
    // What goes here to get default processing? 
} 

risposta

26

nella vostra abitudine JsonConverter, ignorare CanWrite e restituire false:

public override bool CanWrite { get { return false; } } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 

allora si può solo un'eccezione da WriteJson, dal momento che non verrà chiamato.

+2

Era troppo ovvio :). Grazie! – MuiBienCarlota

Problemi correlati