PropertyInfo.SetValue对象与目标类型不匹配

我有一个类似的错误,但不幸的是不是同一个简单的解决方案。 这是代码:

public virtual void MapObject(T obj, IViewModel viewModel, ITPSDataAccess dataAccess) { var objProps = obj.GetType().GetProperties(); var dtoProps = viewModel.GetType().GetProperties(); foreach (var dtoProp in dtoProps) { var objProp = dtoProps.SingleOrDefault(x => x.Name == dtoProp.Name); if (objProp != null) { var dtoVal = dtoProp.GetValue(viewModel, null); objProp.SetValue(obj, dtoVal, null); // ERROR HERE } } ... } 

错误发生在指示的位置,表示“对象与目标类型不匹配”。 看起来我正在传递要设置的正确对象 – 因此我无法解决问题。

我也尝试接受这个解决方案的建议,并检查我试图设置的属性类型抛出exception – 有问题的属性是一个字符串,并且setter似乎没有被破坏,因为它工作在正常,不反思的情况下。

错误似乎在这里:

 var objProp = dtoProps.SingleOrDefault(x => x.Name == dtoProp.Name); 

我想你的意思是:

 var objProp = objProps.SingleOrDefault(x => x.Name == dtoProp.Name);