C# 如何调试反序列化异常?
C# how can I debug a deserialization exception?
我已经使用 XSD.exe 工具创建了一个代表 XSD 的 C# class。
我使用验证代码来检查 XML 与 XSD 的一致性。
我得到了这个工作,但使用另一个 XML 文件会导致异常。
XML 文件是由外部程序生成的,我无法访问原始代码或已发布的 XSD。
在反序列化期间读取 XML 时出现异常:
enter System.InvalidOperationException was unhandled
HResult=-2146233079
Message=Het XML-文档 (235, 17) 包含错误。
错误被描述为试图将字符串转换为 DateTime 格式(这不是正确的描述)。
我以为(235,17) migt代表文档中的位置,但这与调用栈不一致
我的问题:你能帮我一个好的调试策略来解决这类问题吗?我想确切地知道 XML 中的哪一行发生了异常,但不知道该怎么做。
行号和字符号通过 IXmlLineInfo
interface, which XmlTextReader
implements. Of note, both the line number and line position 以数字 1 开头(仅在不可用时为零)报告给异常消息。
因此 "(235, 17)"
是 抛出 时 reader 所在行的行号和位置(从 1 开始) .在大多数情况下,这将是 XML 文件中发生错误的实际位置。但是,有时 XML 序列化程序会在抛出错误之前将 reader 推进到下一个 node。来自实验:
如果XML格式不正确,那么错误将在行和位置报告的地方。
如果 XML 格式正确但 属性 值无法反序列化,则具有错误值的属性将位于行和职位报告。
但是,如果 XML 格式正确且 元素 值无法反序列化,则 XML reader 已经前进到元素末尾到下一个 XML reader 节点的开头(通常是元素打开或关闭),因此导致问题的元素将立即成为一个在报告的位置之前,可能在上一行。
如果在 (0, 0)
处报告错误,则 reader 无法开始解析 XML。可能的问题包括:
- 编码错误。例如,参见 How to change character encoding of XmlReader。
- 您正在使用
StringReader
从 string
阅读,并且有 BOM embedded at the beginning. See for instance XmlReader breaks on UTF-8 BOM 的详细信息。
- 输入根本不是XML。例如。它实际上是 JSON,或者与来自服务器的错误响应相关联的文本消息。
我已经使用 XSD.exe 工具创建了一个代表 XSD 的 C# class。 我使用验证代码来检查 XML 与 XSD 的一致性。 我得到了这个工作,但使用另一个 XML 文件会导致异常。
XML 文件是由外部程序生成的,我无法访问原始代码或已发布的 XSD。
在反序列化期间读取 XML 时出现异常:
enter System.InvalidOperationException was unhandled
HResult=-2146233079 Message=Het XML-文档 (235, 17) 包含错误。
错误被描述为试图将字符串转换为 DateTime 格式(这不是正确的描述)。
我以为(235,17) migt代表文档中的位置,但这与调用栈不一致
我的问题:你能帮我一个好的调试策略来解决这类问题吗?我想确切地知道 XML 中的哪一行发生了异常,但不知道该怎么做。
行号和字符号通过 IXmlLineInfo
interface, which XmlTextReader
implements. Of note, both the line number and line position 以数字 1 开头(仅在不可用时为零)报告给异常消息。
因此 "(235, 17)"
是 抛出 时 reader 所在行的行号和位置(从 1 开始) .在大多数情况下,这将是 XML 文件中发生错误的实际位置。但是,有时 XML 序列化程序会在抛出错误之前将 reader 推进到下一个 node。来自实验:
如果XML格式不正确,那么错误将在行和位置报告的地方。
如果 XML 格式正确但 属性 值无法反序列化,则具有错误值的属性将位于行和职位报告。
但是,如果 XML 格式正确且 元素 值无法反序列化,则 XML reader 已经前进到元素末尾到下一个 XML reader 节点的开头(通常是元素打开或关闭),因此导致问题的元素将立即成为一个在报告的位置之前,可能在上一行。
如果在
(0, 0)
处报告错误,则 reader 无法开始解析 XML。可能的问题包括:- 编码错误。例如,参见 How to change character encoding of XmlReader。
- 您正在使用
StringReader
从string
阅读,并且有 BOM embedded at the beginning. See for instance XmlReader breaks on UTF-8 BOM 的详细信息。 - 输入根本不是XML。例如。它实际上是 JSON,或者与来自服务器的错误响应相关联的文本消息。