XmlSerializer抛出InvalidOperationException

时间:2010-03-26 10:32:35

标签: c# events xml-serialization

我有一个XmlSerializer对象,我已经为UnknownElement和UnknownAttribute事件添加了2个事件处理程序,如下所示:

XmlSerializer xs = new XmlSerialiser(typeof(MyClass));
xs.UnknownAttribute += new XmlAttributeEventHandler(xs_UnknownAttribute);
xs.UnknownElement += new XmlElementEventHandler(xs_UnknownAttribute);

这些事件处理程序中的每一个基本上都做同样的事情,它们打印出导致问题的节点名称或属性名称。

但由于某种原因,会抛出InvalidOperationException,说xml文档中有错误。我认为这些错误会被我的事件所捕获?

更新

例外情况是:

异常是:Unhandled Exception:System.InvalidOperationException:XML文档中存在错误(5,110)。

有一个XmlException类型的InnerException,它指出第5行的'MyTag'开始标记与'AnotherTag'的结束标记不匹配。第5行,第110位。

2 个答案:

答案 0 :(得分:1)

如果没有看到MyClass的定义以及您尝试阅读的XML,很难给出明确的答案。也就是说,异常的文本非常明显,XML标记格式错误,而不是包含未知元素或属性,例如:

<AnotherTag>
  <MyTag>
  </AnotherTag>   <--- This should be </MyTag>
</MyTag>          <--- This should be </AnotherTag>

UnknownAttribute / UnknownElement处理程序不会捕获它,因为XML的结构是有趣的错误。在将XML文档成功解析为节点树,子节点,属性等之后,才能调用这些事件。

进一步解释一下UnknownAttribute / UnknownElement;如果您的类/ XML只允许包含名为 Field1 Field2 的元素,那么如果您有一个名为 Field3的元素,您会发现会引发UnknownElement事件你的XML中的strong>。引发InvalidOperationException因为XML不是XML,引发了UnknownElement事件,因为XML中的元素是意外的,尽管XML在其他方面是有效的。

答案 1 :(得分:0)

您正在处理的两个事件与XML文档结构中的错误无关。

一旦发布特定异常,我会尽力帮助您解决具体问题。您甚至可能需要发布XML。


根据您发布的部分异常的外观,您的文档似乎是无效的XML(不匹配的标记)。没有办法发现这种捕获异常的缺点。