First read this and understand metaprogramming in Ruby: http://www.devsource.com/c/a/Languages/An-Exercise-in-Metaprogramming-with-Ruby/
It seems that C# dynamic supports a similar scenario, but in a different way. C# dynamic objects are in fact not new Types created at runtime, but rather individual compiler-safe bags of key/value pairs that self expose the keys as properties. Thus C# dynamic objects are only available as defined at the instance level and those instances are of type DynamicObject.
The technique I demonstrate in this post: https://uberpwn.wordpress.com/2009/12/21/property-copying-with-dynamic-objects-in-net-4-0/ could be modified to take its key/value pair input from a csv to achieve the same result.