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";

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

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

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

2 回答 2

3

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

特别是,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);
}
于 2012-09-03T17:03:34.260 回答
0

我想到了两件事。

一种显然是使用反射API。例如,如果 user.GetType().GetProperty() 等。

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

于 2012-09-03T17:07:42.490 回答