2010-10-25 6 views
3

Je souhaite obtenir toutes les propriétés d'un objet pendant l'exécution et l'enregistrer dans une base de données avec ses valeurs. Je le fais de façon récursive, c'est-à-dire lorsqu'une propriété est également sur un objet, j'appellerai la même méthode et passerai la propriété en paramètre.Itérer récursivement sur les propriétés d'un objet

Voir mon code ci-dessous:

private void SaveProperties(object entity) { 

    PropertyInfo[] propertyInfos = GetAllProperties(entity); 
    Array.Sort(propertyInfos, 
       delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2) 
       { return propertyInfo1.Name.CompareTo(propertyInfo2.Name); }); 

    _CurrentType = entity.GetType().Name; 

    foreach (PropertyInfo propertyInfo in propertyInfos) { 
     if (propertyInfo.GetValue(entity, null) != null) { 
      if (propertyInfo.PropertyType.BaseType != typeof(BaseEntity)) { 
       SaveProperty((BaseEntity)entity, propertyInfo); 
      } 
      else { 
       // **here** 
       SaveProperties(Activator.CreateInstance(propertyInfo.PropertyType)); 
      } 
     } 
    } 
} 

Cependant, le problème avec mon code actuel est que je crée une nouvelle instance pour les objets de propriété (voir l'accent) perdant ainsi toutes les données qui étaient sur l'objet d'origine. Comment puis-je rerégrer récursivement toutes les propriétés d'un objet? Est-ce possible?

Aidez-nous s'il vous plaît. Merci d'avance.

+0

Je modifier pour supprimer l'emphase et placer un // commentaire au-dessus de la ligne. – IAbstract

Répondre

5

Utilisez cette place pour remplacer votre ligne souligné:

SaveProperties (propertyInfo.GetValue (entity, null)); 

Je voudrais aussi faire quelque chose comme ça pour se assurer GetValue() est applicable et éviter plusieurs appels à ce:

object v = propertyInfo.CanRead ? propertyInfo.GetValue (entity, null) : null; 
if (v != null) { 
    if (...) { 
    } else { 
     SaveProperties (v); 
    } 
} 
+0

Ça a marché! Merci mec! Je savais que je manquais juste quelque chose. Doit être de trop de café et trop peu d'heures de sommeil. – third

+0

@third: détaché –