将String转换为Type,其中Type是变量

时间:2013-07-17 15:17:29

标签: c# generics

我正在尝试创建一个标准方法来处理基于cookie中存储的值填充视图模型,这些值用作搜索条件的用户默认值。

在将字符串cookie值转换为属性类型时遇到问题,因此可以适当地更新视图模型。得到以下错误:

Invalid cast from 'System.String' to 'System.Reflection.RuntimePropertyInfo'.

这就是我所拥有的:

public TViewModel GetUserSearchCriteriaDefaults<TViewModel>(TViewModel viewModel)
        where TViewModel : class
{
    Type type = viewModel.GetType();
    string className = viewModel.GetType().Name;
    PropertyInfo[] properties = type.GetProperties();

    if (Request.Cookies[className] != null)
    {
        string rawValue;

        foreach (PropertyInfo property in properties)
        {
            if (!String.IsNullOrEmpty(Request.Cookies[className][property.Name]))
            {
                rawValue = Server.HtmlEncode(Request.Cookies[className][property.Name]);
                Type propertyType = property.GetType();
                var convertedValue = Convert.ChangeType(rawValue, propertyType); <---- Error from this line
                property.SetValue(viewModel, convertedValue);
            }
        }
    }

    return viewModel;
}

1 个答案:

答案 0 :(得分:6)

变化

Type propertyType = property.GetType();

Type propertyType = property.PropertyType;

使用GetType(),您可以获得property的类型。 而属性是PropertyInfo的实例。