2012-03-28 9 views
3

一般的なオブジェクトをNameValueCollectionに変換する必要があります。私は反射を使用しようとしています。私は親のプロパティを取得することができますが、私はオブジェクトである親のプロパティのプロパティを取得することはできません。ObjectをNameValueCollectionに変換する

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

私はそこに再帰呼び出しのsomesortする必要があるが、それを行う方法を見つけ出すことはできませんと仮定します。どんな助けもありがとうございます。

+1

'objType'は' objectItem'の型ですか?その場合は、そのパラメータを削除できます。また、使用しない 'propertyInfos'変数も作成しました。 – ThatMatthew

+0

私は今すぐこのコードを使用することができました –

答えて

0

入力がClass Twoの場合はClass OneClass Twoの両方のプロパティを含むようにするとします。

これまでのところ、それぞれのプロパティのタイプを調べることができました。 ビルトインタイプの場合(Type.IsPrimitive())、すぐにその結果をNameValueCollectionに追加することができます。それ以外の場合は、その非プリミティブ型の各プロパティを調べて、そのプロセスを再度繰り返す必要があります。あなたが言及しているように、ここで再帰の場所です。

関連する問題