Хорошо, так что это непроверенный код из редактора блокнота: D
Вы можете попробовать это и изменить его так, как вам нужно. Это не будет работать с самого начала!
opt.MapFrom (source => SetName (source, "Mother")))
private object SetName(Person y, string personState)
{
Person person = new Person();
var properties = DictionaryFromType(y);
foreach(var property in properties)
{
if(property.Key.ToLower().Contains(personState.ToLower()))
{
// you should make the real mapping to id here. This is just example code on how it could work
PropertyInfo propertyInfo = person.GetType().GetProperty(property.Key);
propertyInfo.SetValue(person, Convert.ChangeType(property.Value, propertyInfo.PropertyType), null);
}
}
return person;
}
public static Dictionary<string, object> DictionaryFromType(object atype)
{
if (atype == null) return new Dictionary<string, object>();
Type t = atype.GetType();
PropertyInfo[] props = t.GetProperties();
Dictionary<string, object> dict = new Dictionary<string, object>();
foreach (PropertyInfo prp in props)
{
object value = prp.GetValue(atype, new object[] { });
dict.Add(prp.Name, value);
}
return dict;
}
возможно, вам придется немного отладить чтобы заставить его работать, но как-то так, вы можете сделать это.
Возможно, есть более лучшие решения с автопроизводителем, но я только думал об этом на данный момент.
Надеюсь, это поможет вам, даже если это не законченный ответ! (Извините, у меня мало времени)