2012-09-03 78 views
2

我有一个对象用户:如何确定对象的属性名称动态

public class User 
    { 

     public String Name { get; set; } 


     public String Name2 { get; set; } 


     public String Name3 { get; set; } 


    } 

我也有,我要分配给对象的属性字符串的键值设置,当我创建它:

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

现在我创建这样

User user = new User(); 

    user.Name = "zzxasdas"; 

的问题我的目标是,我希望能够分配键/值数据DYNAM ically。这意味着一些物品可能会丢失或订单可能不同。

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

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

回答

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

有两件事情在我脑海中。

其中之一显然是使用Reflection API。例如,如果user.GetType()的getProperty()等

其次,有可能是一个机会,AutoMapper是一个解决方案,您从一个物体复制属性到另一个同名