linqtoXmlは初めてです。与えられた再帰の深さの相関するサブツリールートを表す方法でXMLデータを保持する必要がある
パラメーターとして取得する再帰メソッドがあります。XElement root
void recursiveMethod(XElement root);
具体的には、次のXMLの例も参照してください。
<start>
<Class>
<Worker>
<Name> Dan </Name>
<Phone> 123 </Phone>
<Class>
<Address>
<Street> yellow brick road </Street>
<Zip Code> 123456 </Zip Code>
</Address>
</Class>
</Worker>
</Class>
...
</start>
ご想像のとおり、Name
は値型Address
ですが、はクラス参照です。
Xml情報は、リフレクションを介して動的に追加する必要があります(トップダウンアプローチ)。
長い話を短くするために、私がクラスを調査している途中でWorker
クラスに到達Address
し、「ドリルダウン」したいと想像してください。したがって、現在のワーカークラスの子ノードの正しい参照を使用して再帰メソッドを呼び出します。新しいXElementルートなので、以下のAddress
クラス1の再帰深度 での反射によって見つけたものを追加できます。
この参照はXElementタイプである必要があることに注意してください。
どうやってやるの?
編集:あなたがこれらすべてのことをするという別の考えを持っているが、それを使わないのであれば、私はパラメータXElement
でそれを好むが、私も聞いてうれしいです。XElement
別の問題:
すべてのフィールド(FieldInfo []の変数)を反復処理するような単純な方法で実装を開始しました。値型(IsValueType)に遭遇した場合は、次のようなことをしていました。
root.Add(new XElement("Field",
new XElement("Type", ...),
new XElement("Variable Name", ...),
new XElement("Value", ...)));
したがって、一般的な知識のために:
1.ノードの子孫への参照のみを取得する方法がありました。これにより、より低い再帰レベルで、上記のように別のroot.Add(...)を実行できるようになります。このルートは、前のルートの子への参照になりますか?(これは、Linq構文なしで操作全体を実行することを意味します)
2.プロパティを操作せずにリフレクションを介してプライベートフィールドの値を取得できましたが、問題がありますか?常にリフレクションのプロパティを介して値を取得する必要がありますか?