从NameValueCollection设置类的属性

时间:2011-03-14 19:59:33

标签: c# asp.net reflection

我在一个页面上加密我的整个查询字符串,然后在另一个页面上解密它。我正在使用HttpUtility.ParseQueryString获取所有值的NameValueCollection。

现在,我有一个类,其属性与查询字符串变量名称匹配。我正在努力如何从查询字符串中设置属性的值。

这是我正在进行的代码:

        NameValueCollection col = HttpUtility.ParseQueryString(decodedString);
        ConfirmationPage cp = new ConfirmationPage();

        for(int i = 0; i < col.Count; i++)
        {
            Type type = typeof(ConfirmationPage);
            FieldInfo fi = type.GetField(col.GetKey(i));               

        }

我正在看到通过反射检索值的示例 - 但是我想获得对ConfirmationPage类的属性的引用,并在循环中设置它的值 - col.Get(i)。

2 个答案:

答案 0 :(得分:4)

我可能会采用另一种方式找到属性(或使用GetFields()的字段) 并在查询参数中查找它们,而不是遍历查询参数。然后,您可以使用PropertyInfo对象上的SetValue方法在ConfirmationPage上设置属性的值。

var col = HttpUtility.ParseQueryString(decodedString);
var cp = new ConfirmationPage();

foreach (var prop in typeof(ConfirmationPage).GetProperties())
{
    var queryParam = col[prop.Name];
    if (queryParam != null)
    {
         prop.SetValue(cp,queryParam,null);
    }
}

答案 1 :(得分:2)

尝试:

typeof(ConfirmationPage).GetProperty(col.GetKey(i))
                        .SetValue(cp, col.Get(i), null);