我有一个 XmlSerializer 对象,我已经向 UnknownElement 和 UnknownAttribute 事件添加了 2 个事件处理程序,如下所示:
XmlSerializer xs = new XmlSerialiser(typeof(MyClass));
xs.UnknownAttribute += new XmlAttributeEventHandler(xs_UnknownAttribute);
xs.UnknownElement += new XmlElementEventHandler(xs_UnknownAttribute);
这些事件处理程序中的每一个基本上都做同样的事情,它们打印出导致问题的节点名称或属性名称。
但是由于某种原因,抛出了一个 InvalidOperationException 异常,表示带有 .我以为这些错误会被我的事件捕获?
更新
异常(exception)情况是:
异常是:Unhandled Exception: System.InvalidOperationException: There is an error in XML document (5, 110).
有一个 XmlException 类型的 InnerException,它指出第 5 行的“MyTag”开始标记与“AnotherTag”的结束标记不匹配。第 5 行,位置 110。
最佳答案
没有看到 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 事件strong> 在您的 XML 中。 InvalidOperationException
引发是因为 XML 不是 XML,UnknownElement
引发事件是因为 XML 中有一个意外的元素,尽管 XML 在其他方面是有效的。
关于c# - XmlSerializer 抛出 InvalidOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2522511/