I am using the Newtonsoft JSON library to perform dynamic deserialisation on incoming raw JSON and have found something that I just can't explain.
The starting point is the following JSON string:
{
"task": {
"dueDate": "2012-12-03T00:00:00"
}
}
Nothing too complex there...
In code I am then doing this:
var dyn = JsonConvert.DeserializeObject<dynamic>(rawJson);
DateTime dueDate = dyn.task.dueDate.Value;
This code has been in place for months and works fine, however in a recent test build we were seeing the following error:
'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)
Now this is where is gets odd, everything starts to work again if I change the code above from:
DateTime dueDate = dyn.task.dueDate.Value;
to
DateTime dueDate = dyn["task"]["dueDate"].Value;
So, although this is "fixed" I don't understand why this fixes it and what the possible cause could be. Does anybody have any ideas
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…