I am using the following code to convert some Json into a dynamic object. When I use DateTime.Parse on a property of my dynamic type I would expect the var to guess that it\
There are two different concepts here
So if you do
var settings = new JavaScriptSerializer().Deserialize(json);
var startDate = DateTime.Parse(settings.startDate);
at compile time it is resolved to dynamic type and at run time it is resolved to a concrete type. Compiler checks the right part new JavaScriptSerializer().Deserialize, which returns dynamic. At compile time this instructs compiler to drop all type-safty checks and live it till run time.
This code
var settings = new JavaScriptSerializer().Deserialize(json);
DateTime startDate = DateTime.Parse(settings.startDate);
explicitly says that the dynamic object is of concrete type, therefore compiler is able to infer the type, all its methods and is able to perform static type check at compile time.