如何动态确定对象属性名称

时间:2012-09-03 17:01:54

标签: c#

我有一个对象用户:

 public class User
    {

        public String Name { get; set; }


        public String Name2 { get; set; }


        public String Name3 { get; set; }


    }

此外,我还有一个Key Value字符串集,我想在创建它时将其分配给对象的属性:

'Name':'srgrgsdfsdf'
'Name3':'dsfdsfafafd'
'Name2':'dtewtwerwer'
'Name4':'546353452552'

现在我像这样创建我的对象

  User user = new User();

  user.Name = "zzxasdas";

问题在于我希望能够动态分配键/值数据。这意味着某些项目可能会丢失或订单可能不同。

如何动态检查对象属性的名称,并将其与Key进行比较,如下所示:?

foreach [key] in Key/Value 
if [user] has property named [key] 
add [value] to [user] property with the name [key] 

2 个答案:

答案 0 :(得分:3)

您需要使用Reflection来执行此操作。

特别是,Type.GetPropertiesType.GetProperty将允许您发现有关在类型上定义的属性的信息,并获取或设置其值。

这可能类似于:

User user = new User();

Type t = user.GetType();
foreach(var kvp in propertyDictionary)
{
    var prop = t.GetProperty(kvp.Key);
    if (prop != null)
       prop.SetValue(user, kvp.Value);
}

答案 1 :(得分:0)

我想到了两件事。

一个显然是使用Reflection API。例如,如果user.GetType()。GetProperty()等。

其次,AutoMapper可能是一个解决方案,它将属性从一个对象复制到另一个具有相同名称的对象