2012-04-16 91 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

相关问题