从NameValueCollection设置类的属性

4

我正在对一个页面的整个查询字符串进行加密,然后在另一个页面上进行解密。使用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个回答

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);
    }
}

变量prop抛出错误“隐式类型的局部变量必须初始化” - prop实际上应该是什么对象? - TheGeekYouNeed
foreach循环意图 - 不是for循环。 - TheGeekYouNeed

2

请尝试:

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

使用启用AJAX的页面时要小心。当您指定不想要缓存响应时,JavaScript框架通常会添加额外的参数(如时间戳)。这将破坏此代码,因为您将寻找一个在类上没有对应属性的参数,从而在未找到属性时获得NullReferenceException。 - tvanfosson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接