Это далеко не идеально, но я использую этот метод расширения для копирования свойств с одинаковыми именами между объектами на основе общего интерфейса
public static T CopyTo<T>(this T source, T target) where T : class
{
foreach (var propertyInfo in typeof(T).GetProperties(BindingFlags.Instance | BindingFlags.Public))
{
propertyInfo.SetValue(target, propertyInfo.GetValue(source, null), null);
}
return target;
}
Использование что-то вроде
var internationalCustomer = new InternationalCustomer();
var customer = (Customer)internationalCustomer.CopyTo<ICustomer>(new Customer());
где InternationalCustomer и Заказчик должны были внедрить ICustomer.