将 IEnumerable<MyClass> 映射到 class

Map IEnumerable<MyClass> to a class

我有一个名为 MyClass 的 class,它有一堆属性(字符串、布尔值、整数等)。

我还有一个 IEnumerable<SomeOtherClass> collection,其中有 key/value 个项目。

我想将此 key/value 项列表映射到 MyClass

中的各种属性

有没有办法用 AutoMapper 或其他方式用反射来做到这一点?

谢谢!

正常方法

SomeClass cls = new SomeClass();
Type type =  cls.GetType();
foreach (SomeOtherClass somecls in IEnumerableClass)
    type.GetProperty(somecls.KeyPropName).SetValue(cls, somecls.ValuePropName, null);

OR 扩展方法,如果 IEnumerable class 是键值对集合

public static T ToObject<T>(this IDictionary<string, dynamic> source) where T : class
{
    T obj = new T();
    Type type = obj.GetType();
    foreach (KeyValuePair<string, dynamic> item in source)
        type.GetProperty(item.Key).SetValue(obj, item.Value, null);
    return obj;
}

像下面这样使用。

SomeClass somecls = IEnumerableClass.ToObject<SomeClass>();

SomeClass somecls = ToObject(IEnumerableClass);