Я знаю, что вы спрашивали код отражения, и это старый пост, но у меня есть другое предложение и я хотел бы поделиться им. Это может быть быстрее, чем отражение.
Вы можете сериализовать входной объект в строку json, а затем десериализовать в выходной объект. Все свойства с одинаковым именем будут автоматически назначены свойствам нового объекта.
var json = JsonConvert.SerializeObject(a);
var b = JsonConvert.DeserializeObject<T>(json);