我遇到的问题是从我传入的类型viewmodel的属性中获取值。这是我当前的方法,我相信该属性的名称存储正确,但我似乎无法让价值发挥作用。任何建议将不胜感激。我相信当值的类型也不总是字符串时我会遇到字典问题,但这是后来的另一个问题:)。
以下是viewmodel类型的方法:
public Type ConvertModel(Type mytype) {
Dictionary<string,string> dic = new Dictionary<string,string>();
foreach (var prop in mytype.GetProperties())
{
dic.Add(prop.Name, prop.GetValue(mytype,null).ToString());
}
//return mytype;
}
这就是调用该方法的方法(忽略方法名称,我只想尝试一个想法):
public ActionResult Index()
{
var viewmodel = new myViewModel()
{
FirstName = "Shawn",
LastName = "Michaels"
};
var newType = ConvertModel(viewmodel.GetType());
return View();
}
示例输出是我最终会传回另一个与viewModel相关的模型(比如UserViewModel和UserModel,其中UserModel将填充UserViewModel属性和值,除了方法应该在上述任何2个相关模型中。 )
答案 0 :(得分:1)
因为该属性可以为null,然后引发错误,以便您可以执行以下选项之一:
更新
只需确保传递对象的实例而不是类型:
而不是这个 public Type ConvertModel(Type mytype){
使用下面的代码
public T ConvertModel<T>(T obj)
{
var dic = new Dictionary<string,object>();
foreach (var prop in obj.GetType().GetProperties())
{
dic.Add(prop.Name, prop.GetValue(obj,null));
}
首先:将字典设为obejct
var dic = new Dictionary<string,object>();
foreach (var prop in obj.GetType().GetProperties())
{
dic.Add(prop.Name, prop.GetValue(obj,null));
}
第二个:您可以转换为字符串,如果无法在字典中强制转换为
foreach (var prop in obj.GetType().GetProperties())
{
dic.Add(prop.Name, (string)prop.GetValue(obj,null));
}
或者
foreach (var prop in mytype.GetProperties())
{
dic.Add(prop.Name, Convert.ToString(prop.GetValue(mytype,null)));
}