2017-03-09 5 views
-1

私は、以下のオブジェクトがC#の内部プロパティ値を動的に読み取る方法は?

public class ResTemplate 
{ 
    public string country { get; set; } 
    public int jobCode { get; set; } 
    public Attributes attributes { get; set; } 
} 

public class Attributes 
{ 
    public string state { get; set; } 
    public string region { get; set; } 
} 

は、今私がなぜないようにしよう出力は

country jobcode state region 
US  001  IL  Chicago 
+1

_ "どこにも属性を指定しない" _ - 正確に何を意味するのですか?なぜ "属性"を指定したくないのですか?タイプやフィールド名だけを意味しますか?なぜ反射を使ってみたいのですか?それは遅いですが、通常、あなたの目標を達成するためのより良い方法があります。 [XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)を参照してください。これよりも広範な目標に関する質問をすると、より良い回答が得られます。 –

+0

物事は、インデックスで読むことができるなら、プロパティ名を指定するのではなく、より動的にしたいと思っています – SSK

+0

_ "インデックスで読む" _ - 何を意味するのですか?私はあなたの質問をはっきりと表現していないのではないかと心配しています。より多くの文脈を示し、リフレクションを使用することが許容できるトレードオフである理由を説明する必要があります。あなたは確かに、指定された名前のプロパティを探してオブジェクトツリーを歩くことができますが、これはどのように便利ですか?どのように使用しますか?詳細をご記入ください。 –

答えて

0

を期待

値を読み取るために、プロパティ名を使用せずにデータテーブルにこれを変換する必要があり

myObj.GetType().GetProperty("attributes ").GetType().GetProperty("state") 

と値を処理するだけです。

また

PropertyInfo[] properties = myObj.GetType().GetProperties(); 

が続いてforループを実行して使用し、使用している他のプロパティとその値にアクセスすることができます ropertiesを[I];

+0

私はすでにプロパティ名「属性」を使いたくないと言っています。私は動的にしたいので – SSK

+0

私は私の答えを編集しました:) –

+0

私はそれを試しましたが、動作しません。プロパティ[0] .Nameは "Capacity"を返します – SSK

0

stateValueあなたの望む結果が得られます。

​​
+0

私はすでにプロパティ名 "属性"を使用したくないと言っています。私は動的にしたいので、プロパティ名を渡さずに値を選択する方法を説明することができます – SSK

+0

。私はあなたがその質問を完了していないのではないかと心配しています。 –

関連する問題