2012-02-06 10 views
5

Tengo una colección de diccionarios de más de 100 campos y valores. ¿Hay alguna manera de poblar una clase gigantesca con 100 campos utilizando esta colección?Completar una clase desde un diccionario

La clave en este diccionario corresponde al nombre de la propiedad de mi clase y el valor sería el valor de la propiedad para la clase.

Dictionary<string, object> myDictionary = new Dictionary<string, object>(); 
myDictionary.Add("MyProperty1", "Hello World"); 
myDictionary.Add("MyProperty2", DateTime.Now); 
myDictionary.Add("MyProperty3", true); 

Rellena las propiedades de la siguiente clase.

public class MyClass 
{ 
    public string MyProperty1 {get;set;} 
    public DateTime MyProperty2 {get;set;} 
    public bool MyProperty3 {get;set;} 
} 
+0

que hacer significa poblar la clase? o generar la clase? si es lo primero, solo usa la reflexión. – ColinE

+0

¿Hay alguna razón por la cual su clase tiene cientos de propiedades en lugar de, por ejemplo, una clase de colección de una interfaz o tipo que puede describir cada dato? –

Respuesta

8

Puede utilizar GetProperties para obtener una lista de propiedades para un determinado tipo y utilizar SetValue para establecer un valor específico para una determinada propiedad:

MyClass myObj = new MyClass(); 
... 
foreach (var pi in typeof(MyClass).GetProperties()) 
{ 
    object value; 
    if (myDictionary.TryGetValue(pi.Name, out value) 
    { 
      pi.SetValue(myObj, value); 
    } 
} 
1

Uso

MyClass yourinstance... 

foreach (var KVP in myDictionary) 
{ 
    yourinstance.GetType().GetProperty (KVP.Key).GetSetMethod().Invoke (yourinstance, new object[] { KVP.Value }); 
} 
Cuestiones relacionadas