2012-03-28 18 views
3

Ich muss ein generisches Objekt in eine NameValueCollection konvertieren. Ich versuche zu reflektieren. Während ich die übergeordneten Eigenschaften abrufen kann, kann ich die Eigenschaften einer übergeordneten Eigenschaft, die ein Objekt ist, nicht abrufen.Objekt in NameValueCollection konvertieren

Class One 
public string name{get;set} 

Class Two 
public string desc{get;set} 
public One OneName{get;set;} 

public static NameValueCollection GetPropertyName(
     string objType, object objectItem) 
{ 
    Type type = Type.GetType(objType); 
    PropertyInfo[] propertyInfos = type.GetProperties(); 
    NameValueCollection propNames = new NameValueCollection(); 

    foreach (PropertyInfo propertyInfo in objectItem.GetType().GetProperties()) 
    { 
     if (propertyInfo.CanRead) 
     { 
      var pName = propertyInfo.Name; 
      var pValue = propertyInfo.GetValue(objectItem, null); 
      if (pValue != null) 
      { 
       propNames.Add(pName, pValue.ToString()); 
      } 
     } 
    } 

    return propNames; 
} 

Ich gehe davon aus, dass es einige rekursive Aufrufe geben muss, aber nicht herausfinden, wie es geht. Jede Hilfe wird geschätzt.

+1

Ist 'objType' der Typ von' objectItem'? Wenn ja, können Sie diesen Parameter entfernen. Sie haben auch eine 'propertyInfos'-Variable erstellt, die Sie nicht verwenden. – ThatMatthew

+0

Ich könnte diesen Code gerade jetzt verwenden –

Antwort

0

Ich gehe davon aus, dass Sie NameValueCollection Eigenschaften von beiden Class One und Class Two enthalten soll sich ergibt, wenn der Eingang des Typs Class Two ist.

Nun, da wir das eingerichtet haben, können Sie einen Typ jeder Eigenschaft untersuchen. Wenn es einer der integrierten Typen ist (Type.IsPrimitive() kann Ihnen helfen, dies zu bestimmen), können Sie die Eigenschaft sofort NameValueCollection resultierenden Ergebnis hinzufügen. Andernfalls müssen Sie jede Eigenschaft dieses nicht primitiven Typs durchlaufen und den Vorgang erneut wiederholen. Wie Sie erwähnen, hier ist der Ort für Rekursion.

Verwandte Themen