Sto usando la libreria JSON Newtonsoft per eseguire la deserializzazione dinamica su JSON raw in arrivo e ho trovato qualcosa che non riesco a spiegare.Newtonsoft JSON - Dynamic Objects
Il punto di partenza è la seguente stringa JSON:
{
"task": {
"dueDate": "2012-12-03T00:00:00"
}
}
Niente di troppo complesso si ...
Nel codice che sto poi facendo questo:
var dyn = JsonConvert.DeserializeObject<dynamic>(rawJson);
DateTime dueDate = dyn.task.dueDate.Value;
Questo codice è stato sul posto per mesi e funziona bene, tuttavia in un recente build di test abbiamo riscontrato il seguente errore:
'Newtonsoft.Json.Linq.JObject' does not contain a definition for 'task'
Stack Trace: at CallSite.Target(Closure , CallSite , Object) at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)
Ora, questo è dove si ottiene strano, tutto comincia a lavorare di nuovo se cambio il codice di cui sopra da:
DateTime dueDate = dyn.task.dueDate.Value;
a
DateTime dueDate = dyn["task"]["dueDate"].Value;
Quindi, anche se questo è "fisso" I non capisco perché questo lo risolva e quale potrebbe essere la possibile causa. Qualcuno ha qualche idea
Hai cambiato la versione di Json.NET che stai utilizzando? –
No, questo è stato il mio primo pensiero: guardare la cronologia delle modifiche sia sul codice che sulla libreria non mostra alcuna modifica di ciò che è in (e funzionante) in diretta – MrEyes
Sei sicuro che questa non sia una "prima eccezione casuale" - tipica per dinamica (forse hai aumentato il livello di dettagli nel tuo errore di accesso, ecc.)? – tpeczek