One issue with this is that an object needs to know about every object it can convert to. Perhaps a better solution is to create something like AutoMapper[1] for D [1] http://automapper.codeplex.com/