2012-04-16 93 views
1

我已派生出一個類,它將採用XML文件並動態生成ExpandoObject,以便利用ExpandoObjects和遞歸列表傳遞XML。確定ExpandoObject中的對象類型

將此回傳給處理以檢索數據作品,但我從舊系統檢索到的XML不一致。我可以得到一個單一節點作爲這樣

<test> 
<insured> 
    <a>BLAH BLAH BLAH</a> 
    <b>BLAH BLAH BLAH</b> 
    <c>BLAH BLAH BLAH</c> 
</insured> 
</test> 

<test> 
<insured> 
    <a>BLAH BLAH BLAH</a> 
    <b>BLAH BLAH BLAH</b> 
    <c>BLAH BLAH BLAH</c> 
</insured> 
<insured> 
    <a>BLAH BLAH BLAH</a> 
    <b>BLAH BLAH BLAH</b> 
    <c>BLAH BLAH BLAH</c> 
</insured> 
<insured> 
    <a>BLAH BLAH BLAH</a> 
    <b>BLAH BLAH BLAH</b> 
    <c>BLAH BLAH BLAH</c> 
</insured> 
</test> 

所以對於關鍵的「保險」,我要麼得到一個ExpandoObjectList<ExpandoObject>。我試圖確定最簡單的解決方案來確定返回的類型。

理想情況下,只是像x.insured.OfType<List<ExpandoObject>>()返回一個布爾或這種性質的東西。

乾杯

+3

你爲什麼不使它*總是*給你一個'List ' - 只有一個單值列表,如果只有一個條目? – 2012-04-16 18:37:47

+0

爲了儘量使這些代碼儘可能重複使用並且充滿活力,我覺得這會使事情發生的地方複雜化。上面給出的示例XML並不反映真實源代碼的複雜性質。 – RobW 2012-04-16 18:49:04

+0

這是沒有給出代表性的例子的問題:)但我認爲提出一個*簡單*模型引用子元素名稱總是得到*序列*的匹配是最一致的方法。 – 2012-04-16 18:50:17

回答

1

看起來你可能有喬恩斯基特的幫助下解決這個問題,但你想知道的情況下,你可以使用這個is操作:

if(x.insured is List<ExpandoObject>) { 
    foreach(dynamic item in x.insured) { 
     DoSomething(item); 
    } 
} else { 
    DoSomething(x.insured); 
} 
+0

非常好,那真的是我正在尋找的答案。我會衡量我的兩個選擇。乾杯。 – RobW 2012-04-16 19:23:16

相關問題