You need to drop ExpandoObject to IDictionary<string, object> :
var messageLocation = "Message"; dynamic expando = new ExpandoObject(); expando.Message = "I am awesome!"; var expandoDict = (IDictionary<string, object>)expando; Console.WriteLine(expandoDict[messageLocation]);
(Also, your expando variable should be printed as dynamic , so access to the properties is determined at runtime - otherwise your sample will not compile)
source share