确定ExpandoObject中的对象类型
问题描述:
我已派生出一个类,它将采用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>
所以对于关键的“保险”,我要么得到一个ExpandoObject
或List<ExpandoObject>
。我试图确定最简单的解决方案来确定返回的类型。
理想情况下,只是像x.insured.OfType<List<ExpandoObject>>()
返回一个布尔或这种性质的东西。
干杯
答
看起来你可能有乔恩斯基特的帮助下解决这个问题,但你想知道的情况下,你可以使用这个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
你为什么不使它*总是*给你一个'List' - 只有一个单值列表,如果只有一个条目? –
2012-04-16 18:37:47
为了尽量使这些代码尽可能重复使用并且充满活力,我觉得这会使事情发生的地方复杂化。上面给出的示例XML并不反映真实源代码的复杂性质。 – RobW 2012-04-16 18:49:04
这是没有给出代表性的例子的问题:)但我认为提出一个*简单*模型引用子元素名称总是得到*序列*的匹配是最一致的方法。 – 2012-04-16 18:50:17