У меня есть следующий метод, который я могу использовать, чтобы преобразовать объект данного типа:«Deep» Преобразование объекта
public static TTarget Convert<TTarget>(object source) where TTarget : new()
{
var target = new TTarget();
Type targetType = typeof (TTarget);
foreach (PropertyInfo sourceProperty in source.GetType().GetProperties())
{
if (!sourceProperty.CanRead || (sourceProperty.GetIndexParameters().Length > 0))
continue;
PropertyInfo targetProperty = targetType.GetProperty(sourceProperty.Name);
if ((targetProperty != null) && (targetProperty.CanWrite))
targetProperty.SetValue(target, sourceProperty.GetValue(source, null), null);
}
return target;
}
Он отлично работает для простых классов со свойствами быть типы значений и так далее, но сложные свойства, которые необходимо сопоставить с другим классом, не совсем понятно, как это сделать. Если хранить отображения в статическое свойство:
private static Dictionary<Type, Type> Mappings;
static TypeConverter()
{
Mappings = new Dictionary<Type, Type>
{
{typeof (DbSpace), typeof (DmsSpace)},
{typeof (DbDirectory), typeof (DmsDirectory)},
{typeof (DbFile), typeof (DmsFile)}
};
}
Я, кажется, не найти способ, чтобы найти способ, чтобы использовать эту информацию для преобразования сложных свойств. Как я могу использовать приведенные выше сопоставления для преобразования сложных свойств?
Суть проблемы: как я могу позвонить new
, если у меня есть только объект Type
?
просто использовать автоматический картограф, сделать имена свойств точно так же, где это возможно –
Совершенных оба подхода был успешным. Я опубликовал свои ответы ниже, чтобы другие могли использовать их, если им это нужно. – Candide