public static void Main()
dynamic expando = new ExpandoObject();
expando.product_name = "some name";
expando.product_category = "some category";
Product p = FromExpando<Product>(expando);
Console.WriteLine(p.ProductName);
Console.WriteLine(p.ProductCategory);
public static T FromExpando<T>(ExpandoObject expando) where T : class, new()
if (expando == null) return null;
var properties = typeof(T)
.Where(pi => pi.CanWrite && !pi.GetIndexParameters().Any())
.ToDictionary(pi => pi.Name.ToLower());
foreach (var kvp in expando)
var name = kvp.Key.ToLower().Replace("_", "");
properties.TryGetValue(name, out PropertyInfo prop) &&
prop.PropertyType.IsAssignableFrom(val.GetType()))
public string Id { get; set; }
public string ProductName { get; set; }
public string ProductCategory { get; set; }