反序列化的xml - 检查是否有子节点而不知道特定类型

时间:2010-03-23 12:11:34

标签: c# xml serialization

我已将xml文件反序列化为C#对象,并且包含一个“对象”,其中包含我从此文件中选择的特定节点。

我需要检查此节点是否有子节点。我不知道在任何给定时间对象的具体类型。

目前我只是将对象重新序列化为一个字符串,然后在检查HasChildNodes属性之前将其加载到XmlDocument中,但是当我有数千个节点要检查时,这是非常耗费资源并且速度很慢。

有人能想出一种更好的方法来检查我所拥有的对象是否包含子节点吗?

非常感谢:)

2 个答案:

答案 0 :(得分:1)

我想你可以改变这个过程(查看未标记为[XmlIgnore]的所有公共成员/属性,不是null,并且没有public bool ShouldSerialize*()返回false或任何其他模式),但这似乎是很多的工作......

答案 1 :(得分:1)

尝试使用Linq2xml,它有一个名为XElement(或XDocument)的类,它比XmlDocument更容易使用。 像这样的东西:

XElement x = XElement.Load("myfile.xml");
if (x.Nodes.Count() > 0)
{
  // do whatever
}

更少的代码,更光滑,更易读。 如果您已将xml作为字符串,则可以使用Parse函数替换Load。