Convert object to dynamic
When you want an object that is not dynamic to take on dynamic capabilities, this extension method is your friend:
//Using System.Dynamic and System.ComponentModel
public static class Extensions
{
public static dynamic ToDynamic(this object value)
{
if (value.IsListOrArray())
{
var list = new List<ExpandoObject>();
IEnumerable enumerable = value as IEnumerable;
foreach (object o in enumerable)
{
list.Add(o.ToDynamic());
}
return (dynamic)list;
}
IDictionary<string, object> expando = new ExpandoObject();
foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(value.GetType()))
{
expando.Add(property.Name, property.GetValue(value));
}
return (dynamic)expando;
}
public static bool IsListOrArray(this object value)
{
if (value is IList && value.GetType().IsGenericType)
{
return true;
}
var valueType = value.GetType();
if (valueType.IsArray)
{
return true;
}
return false;
}
}
Source
- From asmodeus74's gist ... which is from a now 404'ing blog post http://blog.jorgef.net/2011/06/converting-any-object-to-dynamic.html by Jorge Fioranelli